import { LoadingSheetSaleOrderReq } from '@gtpl/shared-models/common-models';
import { ContainerRegisterService } from '@gtpl/shared-services/logistics';
import { AlertMessages } from '@gtpl/shared-utils/alert-messages';
import { Button, Card, Table } from 'antd'
import React, { useEffect, useState } from 'react'


export interface LoadingSheetPrintProps { 
  saleOrderId: number;
}

const LoadingSheetPrint = (  props: LoadingSheetPrintProps) => {

  const containerRService = new ContainerRegisterService();
  const [loadingSheetPrintDetails, setLoadingSheetPrintDetails] = useState<any>([]);
  const [loadingSheetDescriptionDetails, setLoadingSheetDescriptionDetails] = useState<any>([]);
  const [lotNumberMapedData, setLotNumberMapedData] = useState<any>([]);

  console.log(props,"saleorderId")

  useEffect(() => {
    if (props.saleOrderId) {
      getLoadingSheetPrint( props.saleOrderId);
    }
  }, [props.saleOrderId]);


  useEffect(() => {
    if (props.saleOrderId) {
      // console.log(props);
      getLoadingSheetData( props.saleOrderId);
    }
  }, [props.saleOrderId]);


  useEffect(() => {
    if (props.saleOrderId) {
      // console.log(props);
      getLotNumbersForLoadingPrint( props.saleOrderId);
    }
  }, [props.saleOrderId]);

  
const getLoadingSheetData=(saleorderId)=>{
  containerRService.getLoadingSheetDescriptionDetails(new LoadingSheetSaleOrderReq(saleorderId)).then((res) => {
    if (res.status) {
      setLoadingSheetDescriptionDetails(res.data);
    } else {
      if (res.intlCode) {    
        setLoadingSheetDescriptionDetails(undefined);
        AlertMessages.getErrorMessage(res.internalMessage);
      } else {
        AlertMessages.getErrorMessage(res.internalMessage);
      }
    }
  })
    .catch((err) => {
      AlertMessages.getErrorMessage(err.message);
      setLoadingSheetDescriptionDetails(undefined);
    });
}


const getLotNumbersForLoadingPrint=(saleorderId)=>{
  console.log(saleorderId,"saleorderId")
  containerRService.getLotNumbersForLoadingPrint(new LoadingSheetSaleOrderReq(saleorderId)).then((res) => {
    if (res.status) {
      setLotNumberMapedData(res.data);
    } else {
      if (res.intlCode) {    
        setLotNumberMapedData(undefined);
        AlertMessages.getErrorMessage(res.internalMessage);
      } else {
        AlertMessages.getErrorMessage(res.internalMessage);
      }
    }
  })
    .catch((err) => {
      AlertMessages.getErrorMessage(err.message);
      setLotNumberMapedData(undefined);
    });
}

  const getLoadingSheetPrint=(saleorderId)=>{
    console.log(saleorderId,"saleorderId")
    containerRService.getLoadingSheetPrintDetails(new LoadingSheetSaleOrderReq(saleorderId)).then((res) => {
      if (res.status) {
        setLoadingSheetPrintDetails(res.data);
      } else {
        if (res.intlCode) {    
          setLoadingSheetPrintDetails(undefined);
          AlertMessages.getErrorMessage(res.internalMessage);
        } else {
          AlertMessages.getErrorMessage(res.internalMessage);
        }
      }
    })
      .catch((err) => {
        AlertMessages.getErrorMessage(err.message);
        setLoadingSheetPrintDetails(undefined);
      });
  }

  const printOrder = () => {
    const divContents = document.getElementById('printme').innerHTML;
    const element = window.open('', '', 'height=700, width=1024');
    const style = `
          <html>
            <head>
              <title></title>
              <style>
                @media print {
                  @page {
                    size: landscape;
                  }
                  .page-break { 
                    page-break-after: always;
                    page-break-before: always;
                  }
                  body {
                    width: 100%;
                  }
                }
                p {
                  font-size: 12px; /* Adjust the font size as needed */
                }
              </style>
            </head>
            <body class="page">${divContents}</body>
          </html>
        `;
    element.document.write(style);
    element.document.close();
    element.print();
    element.close();
  };

  const totalCounts = lotNumberMapedData.map((res) => 
  res.data.reduce((total, item) => total + item.count, 0)
);

const regexPattern = /\d+\-+\d+\-+\d+/; 

const shippingDate = loadingSheetPrintDetails?.[0]?.loadingDate;
const extractedDate = regexPattern.test(shippingDate) ? shippingDate.match(regexPattern)[0] : "--";

  return (
    <div>
      <Card title="LOADING SHEET"
        style={{ textAlign: 'center' }}
        headStyle={{ backgroundColor: '#69c0ff', border: 0 }}
        extra={
          <span style={{ color: 'white' }}>
            <Button onClick={printOrder} className="panel_button">
              Print
            </Button>
          </span>
        }>
          <html>
            <body id='printme'>
        <div style={{ textAlign: 'center' }}>
            <p><h2>BMR INDUSTRIES PVT LTD</h2></p>
            <p>DAMAVARAM,SPSR NELLORE DIST.</p>
            <p><u>LOADING SHEET</u></p>
        </div>
        <div>
            <Card>
                        <table style={{ borderCollapse: 'collapse', width: '100%',
                marginTop: '0',
                marginBottom: '0', tableLayout: 'fixed' }}>
                    <colgroup>
    <col style={{ width: '10%' }} />
    <col style={{ width: '10%' }} />
    <col style={{ width: '10%' }} />
    <col style={{ width: '10%' }} />
    <col style={{ width: '10%' }} />
    <col style={{ width: '10%' }} />
  </colgroup>
                           <thead>
                           <tr>
      <th style={{ textAlign: 'center', border: '1px solid #000' }}>PO NO.</th>
      <td style={{ textAlign: 'center', border: '1px solid #000' }}>  {loadingSheetDescriptionDetails[0]?.poNumber?loadingSheetDescriptionDetails[0]?.poNumber:'-'}</td>
      <th style={{ textAlign: 'center', border: '1px solid #000' }}>LOADING STARTING TIME:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000' }}> {loadingSheetPrintDetails[0]?.stuffing_start_time?loadingSheetPrintDetails[0]?.stuffing_start_time:'-'}</td>
      <th style={{ textAlign: 'center', border: '1px solid #000' }}>DATE:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000' }}> {extractedDate}</td>
    </tr>
    <tr>
    <th style={{ textAlign: 'center', border: '1px solid #000' }}>INV NO.</th>
      <td style={{ textAlign: 'center', border: '1px solid #000' }}> {loadingSheetPrintDetails[0]?.invoice_number?loadingSheetPrintDetails[0]?.invoice_number:'-'}</td>
      <th style={{ textAlign: 'center', border: '1px solid #000' }}>LOADING ENDING TIME:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000' }}> {loadingSheetPrintDetails[0]?.stuffing_completion_time?loadingSheetPrintDetails[0]?.stuffing_completion_time:'-'}</td>
      <th style={{ textAlign: 'center', border: '1px solid #000' }}>TROLLEY NO:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000' }}>&nbsp;</td>
    </tr>
    <tr>
    <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>BUYER:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>&nbsp;</td>
      <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>CONTAINER NO:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}> {loadingSheetPrintDetails[0]?.container_number?loadingSheetPrintDetails[0]?.container_number:'-'}</td>
      <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>LINEAR SEAL NO:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}> {loadingSheetPrintDetails[0]?.line_seal?loadingSheetPrintDetails[0]?.line_seal:'-'}</td>
    </tr>
    <tr>
    <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>PACKING STYLE:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>&nbsp;</td>
      <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>BRAND:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}> {loadingSheetDescriptionDetails[0]?.brandName?loadingSheetDescriptionDetails[0]?.brandName:'-'}</td>
      <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>TEMPERATURE:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}> {loadingSheetPrintDetails[0]?.temp_indicator_no_1?loadingSheetPrintDetails[0]?.temp_indicator_no_1:'-'}</td>
    </tr>
    <tr>
    <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>&nbsp;</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>&nbsp;</td>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>&nbsp;</td>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>&nbsp;</td>
      <th style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}>BMR-SEAL NO:</th>
      <td style={{ textAlign: 'center', border: '1px solid #000', padding: '16px' }}> {loadingSheetPrintDetails[0]?.e_seal?loadingSheetPrintDetails[0]?.e_seal:'-'}</td>
    </tr>
                            </thead> 
                        </table>
            </Card>
        </div>
        </body>
        </html>
        <Card>
          <html>
            <body>
            <table className={'ta-b'} style={{ width: '100%', tableLayout: 'fixed' }}>
  <colgroup>
    <col style={{ width: '20%' }} /> {/* Adjust the width as per your requirements */}
    {lotNumberMapedData.map((_, index) => (
      <col key={index} style={{ width: '10%' }} />
    ))}
  </colgroup>
  
  <tr>
    <th className={'ta-b'}>Variety</th>
    {lotNumberMapedData.map((val, index) => (
      <th key={index} className={'ta-b'}>{val.variety}</th>
    ))}
  </tr>

  {Array.from(new Set(lotNumberMapedData.reduce((acc, val) => acc.concat(val.data.map(e => e.lotNumber)), []))).map((lotNumber, countIndex) => (
    <tr key={countIndex}>
      <td className={'ta-b'}>LOT.NO:{lotNumber}</td>
      {/* Iterate over companies to fill in the corresponding price for each count */}
      {lotNumberMapedData.map((res, companyIndex) => (
        <td key={companyIndex} className={'ta-b'}>
          {res.data.find(item => item.lotNumber === lotNumber)?.count || '-'}
        </td>
      ))}
    </tr>
  ))}
  <tr>
    <td style={{ textAlign: 'left', border: '1px solid #000', padding: '16px' }}>Total:</td>
    <td style={{ textAlign: 'left', border: '1px solid #000', padding: '16px' }}>{totalCounts}</td>
  </tr>
</table>

            </body>
          </html>
        </Card>
       </Card>
    </div>
  )
}

export default LoadingSheetPrint