import React, { useState, useRef, useEffect } from 'react';
import { Button, Card, Col, DatePicker, Form, Input, Row, Select, Table, Typography } from 'antd';
const { RangePicker } = DatePicker;
import { useForm } from 'antd/lib/form/Form';
import { CollectionsService } from '@gtpl/shared-services/finance';
import { AlertMessages } from '@gtpl/shared-utils/alert-messages';
import { DutyDrawBackDateReq, IgstReportReq } from '@gtpl/shared-models/finance';
import { Excel } from 'antd-table-saveas-excel';
import { SaleOrderService } from '@gtpl/shared-services/sale-management';

const IGSTAmountReport = () => {
const { Text } = Typography;
const [form] = useForm();
const Service = new CollectionsService();
const [getAllData,setAllData] = useState([]);
     const [years,setYears] = useState<any[]>([])
       const saleService = new SaleOrderService();
     
  useEffect(() => {
    getIGSTAmountReport();
    getAllFinancialYear();
  }, []);

  const getIGSTAmountReport =() => {
    
    Service.getIGSTAmountReport({ financeYear: form.getFieldValue('financialYear') })
    .then((res) => {
      if (res.data && Array.isArray(res.data) && res.data.length > 0) {

        const totalBmrIndToBeReceived = res.data.reduce((acc, item) => acc + Number(item.bmrIndToBeRecived || 0), 0);
        const totalBmrExportsToBeReceived = res.data.reduce((acc, item) => acc + Number(item.bmrExportstoBeRecived || 0), 0);
        const totalBmrIndReceived = res.data.reduce((acc, item) => acc + Number(item.bmrIndReceived || 0), 0);
        const totalBmrExportsReceived = res.data.reduce((acc, item) => acc + Number(item.bmrExportsReceived || 0), 0);

              const transformedData = [
        {
          key: "1",
          particulars: "To Be Received",
          bmrIpl: totalBmrIndToBeReceived,
          bmrExports: totalBmrExportsToBeReceived,
          total: totalBmrIndToBeReceived + totalBmrExportsToBeReceived,
        },
        {
          key: "2",
          particulars: "Received",
          bmrIpl: totalBmrIndReceived,
          bmrExports: totalBmrExportsReceived,
          total: totalBmrIndReceived + totalBmrExportsReceived,
        },
      ];

        setAllData(transformedData);

      } else {
        AlertMessages.getErrorMessage("No data available");
        setAllData([]); 
      }
    })
    .catch((err) => {
      AlertMessages.getErrorMessage(err.internalMessage || "Error fetching data");
      setAllData([]); 
    });
};
   const getAllFinancialYear  = () => {
       saleService.getAllFinancialYear().then(res => {
         if (res.status) {
           setYears(res.data);
         } else {
           if (res.intlCode) {
             setYears([]);
             AlertMessages.getErrorMessage(res.internalMessage);
           } else {
             AlertMessages.getErrorMessage(res.internalMessage);
           }
         }
       }).catch(err => {
         setYears([]);
         AlertMessages.getErrorMessage(err.message);
       })
     }
const handleDownload = () => {
  let totalBmrIpl = 0;
  let totalBmrExports = 0;
  let totalSum = 0;

  getAllData.forEach(({ bmrIpl, bmrExports, total }) => {
    totalBmrIpl += Number(bmrIpl) || 0;
    totalBmrExports += Number(bmrExports) || 0;
    totalSum += Number(total) || 0;
  });

  const excelData = [...getAllData, {
    key: "summary",
    particulars: "Total",
    bmrIpl: totalBmrIpl.toLocaleString("en-IN", { minimumFractionDigits: 2 }),
    bmrExports: totalBmrExports.toLocaleString("en-IN", { minimumFractionDigits: 2 }),
    total: totalSum.toLocaleString("en-IN", { minimumFractionDigits: 2 })
  }];

  const excel = new Excel();
  excel
    .addSheet("IGST Amount Report")
    .addColumns([
      { title: 'Particulars', dataIndex: 'particulars' },
      { title: 'BMR IPL', dataIndex: 'bmrIpl' },
      { title: 'BMR Exports', dataIndex: 'bmrExports' },
      { title: 'Total', dataIndex: 'total' },
    ])
    .addDataSource(excelData)
    .saveAs("IGST-Amount-Report.xlsx");
};

  const columns = [
    {
      title: "Particulars",
      dataIndex: "particulars",
      key: "particulars",
      width: "30%",
    //   ...getColumnSearchProps("particulars"),
    },
    {
      title: "BMR IPL",
      dataIndex: "bmrIpl",
      key: "bmrIpl",
      render: (val) => val?.toLocaleString("en-IN", { minimumFractionDigits: 2 })
    },
    {
      title: "BMR Exports",
      dataIndex: "bmrExports",
      key: "bmrExports",
            render: (val) => val?.toLocaleString("en-IN", { minimumFractionDigits: 2 })
    },
    {
      title: "Total",
      dataIndex: "total",
      key: "total",
      render: (val) => val?.toLocaleString("en-IN", { minimumFractionDigits: 2 })
    },
  ];
const onReset = () => {
    form.resetFields();
  getIGSTAmountReport()
  };
  return (
    <Card
    size="small"
    title={<span style={{ color: 'white' }}>IGST  Report </span>}
    style={{ textAlign: 'center' }}
    headStyle={{ backgroundColor: '#69c0ff', border: 0 }}
     extra={
    <Button onClick={handleDownload}  style={{ marginRight: 20 }}>
      Get Excel
    </Button>
  }
  >
    <Form layout='vertical' form={form}>
                    <Row gutter={16} align="middle">
                     
                        <Col xs={{ span: 24 }} sm={{ span: 24 }} md={{ span: 6 }} lg={{ span: 4 }} xl={{ span: 4 }}>
                                                      <Form.Item name="financialYear" label="Financial Year">
                                                        <Select
                                                          showSearch
                                                          placeholder="Select Financial Year"
                                                          optionFilterProp="children"
                                                          filterOption={(input, option) => option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                                                          allowClear
                                                        >
                                                          {years.filter(year => year.financialYear !== null).map((y: any) => (
                                                            <Select.Option key={y.financialYear} value={y.financialYear}>
                                                              {y.financialYear}
                                                            </Select.Option>
                                                          ))}
                                                        </Select>
                                                      </Form.Item>
                                                    </Col>
                    <Col style={{ paddingLeft: '10px', marginTop: '7px' }}>
                        <Button 
                        type="primary" 
                        //   disabled={disable} 
                        onClick={() => getIGSTAmountReport()}
                        >
                        Get Report
                        </Button>
                    </Col>
                    <Col style={{ paddingLeft: '10px', marginTop: '7px' }}>
                        <Button 
                        
                        type="primary" 
                        
                        onClick={onReset}
                        > 
                        Reset 
                        </Button>
                    </Col>
                    </Row>
                </Form>
    <Table
      size="small"
      columns={columns}
      dataSource={getAllData}
      bordered
      summary={(pageData) => {
        let totalBmrIpl = 0;
        let totalBmrExports = 0;
        let totalSum = 0;
      
        pageData.forEach(({ bmrIpl, bmrExports, total }) => {
          totalBmrIpl += Number(bmrIpl) || 0;
          totalBmrExports += Number(bmrExports) || 0;
          totalSum += Number(total) || 0;
        });

        return (
          <Table.Summary.Row>
            <Table.Summary.Cell index={0} align="left"><Text>Total</Text></Table.Summary.Cell>
            <Table.Summary.Cell index={1} align="left"><Text>{totalBmrIpl.toLocaleString("en-IN", { minimumFractionDigits: 2 })}</Text></Table.Summary.Cell>
            <Table.Summary.Cell index={2} align="left"><Text>{totalBmrExports.toLocaleString("en-IN", { minimumFractionDigits: 2 })}</Text></Table.Summary.Cell>
            <Table.Summary.Cell index={3} align="left"><Text>{totalSum.toLocaleString("en-IN", { minimumFractionDigits: 2 })}</Text></Table.Summary.Cell>
          </Table.Summary.Row>
        );
      }}
    />
  </Card>
);
};

export default IGSTAmountReport;
