import React, {useState} from 'react';
import { history, useRequest, useAccess, Access } from 'umi';
import {Card, Row, Col, Button, Checkbox, Modal, Form, Tabs, message} from 'antd'
import moment from 'moment';
import {createSearchForm} from "@/utils/createForm";
import classNames from "classnames";
import utilsStyles from '@/utils/utils.less';
import StaffCard from '../components/StaffCard'
import {fetchShiftsListAudit, fetchShiftsListCreate, fetchShiftsRemove, fetchShiftsDelete} from '@/services/staff'


import style from '../index.less'
import useRequestTable from "@/useHooks/useRequestTable";

const { confirm } = Modal;
const { TabPane } = Tabs;

const Index = (props) => {
  /* 选中审批 */
  const [wordIds, setWorkIds] = useState([])
  const [tab, setTab] = useState('1')
  const access = useAccess()

  /**
   * @表单提交
   */
  const [form] = Form.useForm();

  const createList = useRequestTable(fetchShiftsListCreate, {
    form
  })
  const auditList = useRequestTable(fetchShiftsListAudit, {
    form, manual: true
  }, true)

  const tabAction = {
    1: createList, 2: auditList
  }[tab]

  const leaveDelete = useRequest(fetchShiftsDelete, {
    manual: true,
    onSuccess: () => {
      message.success('删除成功', 1)
      tabAction?.search?.refresh()
    }
  })
  const leaveRemove= useRequest(fetchShiftsRemove, {
    manual: true,
    onSuccess: () => {
      message.success('撤销成功', 1)
      tabAction?.search?.refresh()
    }
  })

  const searchChange = (val) => {
    // if (val?.adjustmentMonth){
    //   val.adjustmentMonth = moment(val.adjustmentMonth).format("YYYY-MM")
    // }
    if (val?.queryMonth){
      val.queryMonth = moment(val.queryMonth).format("YYYY-MM")
    }
    tabAction?.search?.submit(val)
  };

  /**
   * @页面方法
   */
  const tabChange = (requestType) => {
    setTab(requestType);
    const tabCurrentAction = {
      1: createList, 2: auditList
    }[requestType]
    tabCurrentAction?.search?.submit({pageNumber: 1, pageSize: 10})
  }
  const workConfirm = () => {
    confirm({
      centered: true,
      title: '审批提示',
      icon: null,
      content: wordIds.length > 1 ? '您选择多个审批项, 是否发起合并审批?' : '是否发起审批?',
      onOk() {
        console.log('OK');
      }
    });
  }
  const workDelete = (id) => {
    confirm({
      centered: true,
      title: '删除提示',
      icon: null,
      content: '是否删除此审批项',
      onOk() {
        leaveDelete.run(id)
      }
    });
  }
  const batchDelete = () => {
    confirm({
      centered: true,
      title: '删除提示',
      icon: null,
      content: '是否删除选中审批项',
      onOk() {
        tabAction?.search?.refresh()
      }
    });
  }
  const revocation = (id) => {
    confirm({
      centered: true,
      title: '撤回提示',
      icon: null,
      content: '是否撤回选中审批项',
      onOk() {
        leaveRemove.run(id)
      }
    });
  }

  /**
   * @页面数据
   */
  const searchData = [
    {autoLayout: {}, label: '时间', name: tab === '1' ? '' : 'queryMonth', type: 'singleDate', datePicker: 'month'},
    {autoLayout: {}, label: '审批状态', name: tab === '1' ? 'adjustmentState' : 'auditState', type: 'select',
      selectData: [
        {value: 0, label: '待提交'},
        {value: 1, label: '待审批'},
        {value: 2, label: '已审批'},
        {value: 3, label: '已驳回'},
      ]
    },
    {autoLayout: {}, label: '查询', name: 'adjustmentName', type: 'input'}
  ];

  const LeaveData = {
    1: createList.dataSource, 2: auditList.dataSource
  }[tab] || []

  const accessList = {
    info: access.insideAccess('EOahAhXcZZv'),
    edit: access.insideAccess('TqQwvsoCbuv'),
    cancel: access.insideAccess('SfSWRTWvAaZ'),
    delete: access.insideAccess('LZpNDvCznRV')
  }

  return (
    <div className={ classNames(utilsStyles.disFlexCol, utilsStyles.fullContainer) }>
      <Card style={{flex: 1}} bodyStyle={{padding: 0}}>
        {/* 顶部搜索 */}
        <Tabs activeKey={tab} style={{padding: '10px 20px 0'}} onChange={tabChange}>
          <TabPane tab='我发起的' key='1'/>
          <TabPane tab='待我审批' key='2'/>
        </Tabs>
        <div className={classNames("pos_btw", style.border_bottom)}>
          <Row style={{flex: 1}}>
            <Col span={18}>
              <Form className={style.work_search_form} form={form} onValuesChange={searchChange}>
                {searchData.map(item => createSearchForm(item))}
              </Form>
            </Col>
            <Col span={6}>
              {tab === '1' && (
                <Button type="primary" onClick={() => history.push(`/ops/staff/shifts/new/add`)}>新增调班</Button>
              )}
            </Col>
          </Row>
        </div>
        {/* 审批项 */}
        <Checkbox.Group style={{margin: '10px 0 40px', width: '100%', padding: 10}} onChange={setWorkIds}>
          <Row gutter={18}>
            {LeaveData?.map((item, index) => {
              const cardOptions = {
                scheduleNames: item?.adjustmentName || '',
                scheduleMonth: item?.creationTime && moment(item.creationTime).format("YYYY-MM-DD") || '',
                creationName: item?.applicantName || item?.creationName || '',
                infoUrl: item?.adjustmentState === 1 && tab === '2'
                  ? `/ops/staff/shifts/audit/${item.id}/audit`
                  : `/ops/staff/shifts/${item.id}`,
                editUrl: {
                  1: `/ops/staff/shifts/edit/${item.id}`,
                  2: `/ops/staff/shifts/audit/${item.id}/audit`
                }[tab],
                userUrl: item.applicantUrl
              }
              const status = {
                0: 'toSubmit', 1: 'pending', 2: 'approved', 3: 'rejected'
              }[item.adjustmentState]
              return (
                <Col key={index} md={{span: 8}} xxl={{span: 6}}>
                  <StaffCard
                    isAudit={tab !== '1'}
                    status={status}
                    id={item.id}
                    onDelete={workDelete}
                    onRevocation={revocation}
                    cardOptions={cardOptions}
                    accessList={accessList}
                  />

                </Col>
              )
            })}
          </Row>
        </Checkbox.Group>

        {/* 审批选择 */}
        <div className={classNames('pos_end', style.footer_btn)}>
          <Button
            disabled={wordIds.length === 0}
            onClick={batchDelete}
            style={{marginRight: 10}}
          >删除</Button>
          <Button
            disabled={wordIds.length === 0}
            onClick={workConfirm}
            type="primary"
          >发起审批</Button>
        </div>

      </Card>
    </div>
  );
};

export default Index