import { ExpensesLogisticsCreateDto, ExpensesLogisticsUpdateDto } from '@gtpl/shared-models/common-models';
import { ContainerRegisterService } from '@gtpl/shared-services/logistics';
import { AlertMessages } from '@gtpl/shared-utils/alert-messages';
import { Card, Col, DatePicker, Form, Input, Row, Checkbox, message, Button } from 'antd';
import TextArea from 'antd/lib/input/TextArea';
import moment from 'moment';
import React, { useEffect, useState } from 'react'
import { Link, Redirect, useHistory } from 'react-router-dom';


export interface ExpensesLogisticsProps { 
  saleOrderId: number;
  expensesLogisticsData: any;
  updateExpensesLogistics: (ItemAttributes: any) => void;
  isUpdate: boolean;
  closeForm: () => void;
  setDrawerVisible: any;
  getExpensesDetailsOfLogistics?: () => void;
}

const ExpensesLogisticsForm = (props:ExpensesLogisticsProps) => {
  const service = new ContainerRegisterService();
  const [form] = Form.useForm();
  const propsId=props.saleOrderId
  const [initialValues, setInitialValues] = useState();
  const [updateCount, setUpdateCount] = useState(0);
  const [expensesLogisticsView, setExpensesLogisticsView] = useState([]);
  const [expensesLogisticsId, setExpensesLogisticsId] = useState<any>('');
const [disable,setDisable]=useState<boolean>(false)
  const containerRegisterService=new ContainerRegisterService()
  const history=useHistory()
  
  
  // useEffect(()=>{
  //     getData()
  // },[])

  useEffect(() => {
    if (props.expensesLogisticsData) {
      const valuesToSet = { ...props.expensesLogisticsData };

      if (props.expensesLogisticsData) {
        form.setFieldsValue({
          chaBill: props.expensesLogisticsData.chaBill,
          oceanFrieght: props.expensesLogisticsData.oceanFrieght,
          domesticFrieght: props.expensesLogisticsData.domesticFrieght,
          salesComission: props.expensesLogisticsData.salesComission,
          antiDumpingDuty: props.expensesLogisticsData.antiDumpingDuty,
          cvd: props.expensesLogisticsData.cvd,
          clearingForwarding: props.expensesLogisticsData.clearingForwarding,
          ddpTransport: props.expensesLogisticsData.ddpTransport,
          marineInsurance: props.expensesLogisticsData.marineInsurance,
          amc: props.expensesLogisticsData.amc,
          dutyDrawback: props.expensesLogisticsData.dutyDrawback,
          rodtepAmount: props.expensesLogisticsData.rodtepAmount,
          fdaDueDate: valuesToSet.fdaDueDate ? moment(valuesToSet.fdaDueDate.split(' ')[0], 'YYYY-MM-DD') : null,
          remarks: props.expensesLogisticsData.remarks,
          
                });
      } else {
        form.setFieldsValue({
          chaBill: props.expensesLogisticsData.chaBill,
          oceanFrieght: props.expensesLogisticsData.oceanFrieght,
          domesticFrieght: props.expensesLogisticsData.domesticFrieght,
          salesComission: props.expensesLogisticsData.salesComission,
          antiDumpingDuty: props.expensesLogisticsData.antiDumpingDuty,
          cvd: props.expensesLogisticsData.cvd,
          clearingForwarding: props.expensesLogisticsData.clearingForwarding,
          ddpTransport: props.expensesLogisticsData.ddpTransport,
          marineInsurance: props.expensesLogisticsData.marineInsurance,
          amc: props.expensesLogisticsData.amc,
          dutyDrawback: props.expensesLogisticsData.dutyDrawback,
          rodtepAmount: props.expensesLogisticsData.rodtepAmount,
          fdaDueDate: valuesToSet.fdaDueDate ? moment(valuesToSet.fdaDueDate.split(' ')[0], 'YYYY-MM-DD') : null,
          remarks: props.expensesLogisticsData.remarks,

        });
      }

      setInitialValues(valuesToSet);
      if (valuesToSet.fdaDueDate) {
        const matches = valuesToSet.fdaDueDate.match(/R(\d+)$/);
        if (matches) {
          setUpdateCount(parseInt(matches[1], 10));
        }
      }
    }

  }, [props.expensesLogisticsData]);

  const onFinish = (val) => {
  const req=new ExpensesLogisticsCreateDto()
    req.chaBill = form.getFieldValue('chaBill');
    req.oceanFrieght = form.getFieldValue('oceanFrieght');
    req.domesticFrieght = form.getFieldValue('domesticFrieght');
    req.salesComission = form.getFieldValue('salesComission');
    req.antiDumpingDuty = form.getFieldValue('antiDumpingDuty');
    req.cvd = form.getFieldValue('cvd');
     req.clearingForwarding = form.getFieldValue('clearingForwarding');
     req.ddpTransport = form.getFieldValue('ddpTransport');
     req.marineInsurance = form.getFieldValue('marineInsurance');
     req.amc = form.getFieldValue('amc');
     req.dutyDrawback = form.getFieldValue('dutyDrawback');
     req.rodtepAmount = form.getFieldValue('rodtepAmount');
     req.fdaDueDate = form.getFieldValue('fdaDueDate');
     req.remarks = form.getFieldValue('remarks');

   req.saleOrderId=propsId
   if (props.isUpdate) {
    req.expensesLogisticsId = props.expensesLogisticsData.expensesLogisticsId;
  }
      service.createExpensesLogistics(req).then(res => {
          if (res.status) {
              AlertMessages.getSuccessMessage(res.internalMessage)
              setTimeout(() => {
                  message.success('Submitted successfully');
                  history.push("/expenses-logistics-view");

                //   window.location.reload();
              }, 500);;
          }
      }).catch(err => {
          AlertMessages.getErrorMessage(err.message);
      })
  }




  let createdUser = "";

  if (!props.isUpdate) {
    createdUser = localStorage.getItem("createdUser");
  }

  const clearData = () => {
      form.resetFields()
    }


    const onSave = (val: ExpensesLogisticsCreateDto) => {
      setDisable(false);
      const fdaDueDate = form.getFieldValue('fdaDueDate');
      
      if (props.isUpdate) {
        let currentUpdateCount = updateCount;
  
        if (fdaDueDate) {
          currentUpdateCount += 1;
          val.fdaDueDate = `${fdaDueDate.format('YYYY-MM-DD')} R${currentUpdateCount}`;
        }
  
        const updateDto: ExpensesLogisticsUpdateDto = {
          ...val,
          expensesLogisticsId: props.expensesLogisticsData.expensesLogisticsId,
          createdUser: props.expensesLogisticsData.createdUser,
          updatedUser: localStorage.getItem("createdUser") || "unknown",
          isActive: props.expensesLogisticsData.isActive,
        };
  
        setUpdateCount(currentUpdateCount);
        props.updateExpensesLogistics(updateDto);
      } else {
        if (fdaDueDate) {
          val.fdaDueDate = fdaDueDate.format('YYYY-MM-DD');
        }
        onFinish(val);
      }
    };
  
  return (
    <div>
        <Card>
            <Form layout='vertical' form={form} onFinish={onSave} initialValues={initialValues}>
                <Row gutter={24}>
                <Col span={6} hidden>
          <Form.Item name="saleOrderId" label="SO Number" hidden  >
              </Form.Item>
              <Form.Item style={{display:"none"}} name="createdUser"  initialValue={createdUser}>
          <Input hidden/>
        </Form.Item>
              <Form.Item name="expensesLogisticsId" label="Expenses Logistics Id" hidden  >
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="CHA Bill" name="chaBill">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="Ocean Frieght" name="oceanFrieght" >
                <Input  placeholder="Enter In INR" disabled={props.isUpdate} />
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="Domestic Frieght" name="domesticFrieght">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col> 
            <Col span={6}>
              <Form.Item label="Sales Comisssion" name="salesComission">
                <Input  placeholder="Enter In INR/USD" disabled={props.isUpdate}/>
              </Form.Item>
            </Col> 
                </Row>
                <Row gutter={24}>
                <Col span={6}>
              <Form.Item label="Anti Dumping duty" name="antiDumpingDuty">
                <Input  placeholder="Enter In USD" disabled={props.isUpdate}/>
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="CVD" name="cvd">
                <Input  placeholder="Enter In USD" disabled={props.isUpdate}/>
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="Clearing & Forwarding" name="clearingForwarding">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col> 
            <Col span={6}>
              <Form.Item label="DDP Transport" name="ddpTransport">
                <Input  placeholder="Enter In USD" disabled={props.isUpdate}/>
              </Form.Item>
            </Col> 
                </Row>
                <Row gutter={24}>
                <Col span={6}>
              <Form.Item label="Marine Insurance" name="marineInsurance">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="AMC" name="amc">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="Duty Drawback" name="dutyDrawback">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col> 
            <Col span={6}>
              <Form.Item label="RODTEP Amount" name="rodtepAmount">
                <Input  placeholder="Enter In INR" disabled={props.isUpdate}/>
              </Form.Item>
            </Col> 
                </Row>
                <Row gutter={24}>
                <Col span={6}>
              <Form.Item label="FDA/Due Date" name="fdaDueDate">
                <DatePicker />
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item label="Remarks" name="remarks">
                <TextArea  placeholder="Enter Remarks" />
              </Form.Item>
            </Col> 
                </Row>
                <Row>
                        <Col span={24} style={{ textAlign: 'right' }}>
                            <Button type="primary" htmlType="submit">
                                Submit
                            </Button>
                            <Button htmlType="button" style={{ margin: '0 14px' }}
                                onClick={clearData}
                            >
                                Reset
                            </Button>
                        </Col>
                    </Row>
            </Form>
        </Card>
    </div>
  )
}

export default ExpensesLogisticsForm