/* eslint-disable no-return-assign,no-param-reassign */
import React, { useEffect } from 'react';
import { connect } from 'umi';
import { dispatchHandle } from '@/utils/publicHandle';
import { Card, message, Button, Form, Spin } from 'antd';
import classNames from 'classnames';
import _ from 'lodash';
import utilsStyles from '@/utils/utils.less';
import WorkFLow from '../components/WorkFLow';
import style from '../index.less';
import ExportMonth from './ExportMonth';

import WorkforceForm from './schedule';

const WorkInfo = (props) => {
  const {
    match: { params },
    dispatch,
    loading,
    pageLoading,
    opsStaff: { workforceInfo },
  } = props;
  const { id } = params;
  const type = id ? 'edit' : 'add';

  /**
   * @表单提交
   */
  const [form] = Form.useForm();
  const handleSubmit = (e, planState = 0) => {
    e.preventDefault();
    form
      .validateFields()
      .then((values) => {
        const mfVos = [];
        const payload = _.cloneDeep(values);
        const workingDay = payload?.workingDay;
        const holiday = payload?.holiday;
        if (workingDay?.length > 0) {
          workingDay.forEach((item) => {
            const holidayDate = Object.keys(item)?.[0];
            const newHoliday = Object.values(item)?.[0];
            newHoliday?.forEach((child) => {
              mfVos.push({ ...child, frequencyType: 1, frequencyDate: holidayDate });
            });
          });
          delete payload.workingDay;
        }
        if (holiday?.length > 0) {
          holiday.forEach((item) => {
            const holidayDate = Object.keys(item)?.[0];
            const newHoliday = Object.values(item)?.[0];
            newHoliday?.forEach((child) => {
              mfVos.push({ ...child, frequencyType: 2, frequencyDate: holidayDate });
            });
          });
          delete payload.holiday;
        }
        if (id) payload.id = parseInt(id, 10);
        payload.planState = planState;
        if (planState === 1 && !payload.auditRuleId) {
          message.error('请选择审批流程', 1);
          return;
        }
        console.log('=======', { ...payload, mfVos });
        console.log('values', values);
        dispatchHandle(
          dispatch,
          'opsStaff/common_service_m_schedule_plan_addEdit_patch',
          { ...payload, mfVos },
          () => {
            closeCurrentPage('/ops/staff/workforce');
          },
        );
      })
      .catch(() => {
        message.error('请补全表单必填项');
      });
  };

  const formRebuild = (res) => {
    dispatchHandle(dispatch, 'opsStaff/setModelsState', { workforceInfo: res });
  };

  useEffect(() => {
    if (id) {
      dispatchHandle(dispatch, 'opsStaff/common_service_m_schedule_plan_detail_id_get', { id });
    }
    return dispatchHandle(dispatch, 'opsStaff/setModelsState', {
      workforceInfo: {},
      holidayEditDate: undefined,
    });
  }, [id]);

  useEffect(() => {
    dispatchHandle(dispatch, 'opsStaff/common_service_m_audit_rule_list_post', {
      businessType: 'schedule',
    });
    dispatchHandle(dispatch, 'user/account_service_organization_tree_user_post');
    return dispatchHandle(dispatch, 'opsStaff/setModelsState', {
      workforceInfo: {},
      holidayEditDate: undefined,
    });
  }, []);

  return (
    <div className={classNames(utilsStyles.disFlexCol, utilsStyles.fullContainer)}>
      <div className={style.wrap_page}>
        <Spin spinning={pageLoading || false}>
          <div>
            <ExportMonth show={type === 'add'} resetForm={formRebuild} />
            <Form
              style={{ flex: 1 }}
              form={form}
              initialValues={{
                scheduleFrequencyNumber: 1,
              }}
            >
              <WorkforceForm form={form} type={type} workforceInfo={workforceInfo} />

              <Card bodyStyle={{ padding: 20 }} style={{ marginTop: 10 }}>
                <div style={{ width: 400, marginBottom: 10 }}>
                  <WorkFLow type={type} form={form} />
                </div>

                <div className="pos_end">
                  <Button
                    disabled={workforceInfo?.planState > 0}
                    style={{ marginRight: 31 }}
                    onClick={handleSubmit}
                  >保存</Button>
                  <Button loading={loading} type="primary" onClick={(e) => handleSubmit(e, 1)}>
                    发起审批
                  </Button>
                </div>
              </Card>
            </Form>
          </div>
        </Spin>
      </div>
    </div>
  );
};

export default connect(({ opsStaff, loading }) => ({
  opsStaff,
  loading: loading.effects['opsStaff/common_service_m_schedule_plan_addEdit_patch'],
  pageLoading: loading.effects['opsStaff/common_service_m_schedule_plan_detail_id_get'],
}))(WorkInfo);