import { factorySelect, shopSelectByFactory } from "@/services/system";
import { doFetch } from "@/utils/doFetch";
import { Button, Table } from "antd";
import EditTable from "@/components/EditTable";
import { useEffect, useState } from 'react'
import { useModel } from 'umi'

const EditUpload = ({ record, fid, storeId }) => {
  const [value, setvalue] = useState({
    [record.id]: record.downloadList
  });
  const { initialState, setInitialState } = useModel("@@initialState");
  useEffect(() => {
    if (!value) {
      return
    }
    let newlist = Object.keys(value)?.map?.(it => {
      let id = it;
      let newArr = value[id]?.filter(it => typeof (it.id) == "number") ?? [];
      return {
        id,
        downloadList: newArr.map(its => {
          return {
            storePositionId: its?.storePositionId,
            outstroeNum: its?.outstroeNum,
            stockNum: its?.stockNum,
            remark: its?.remark,
            materieControlNo: its?.materieControlNo
          }
        })
      }
    }) ?? [];
    setInitialState(s => {
      return ({
        ...s,
        submits: {
          id: fid,
          materialList: (s.submits && s?.submits?.materialList) ? s?.submits?.materialList?.filter(it => newlist.map(item => item.id).indexOf(it.id) == -1)?.concat(newlist)?.filter(it => it.downloadList?.length > 0) : []
        }
      })
    })
  }, [value])

  return <EditTable
    rowKey="id"
    maxLength={1000}
    linkconfig={{
      urlchangeval: {
        database: (params) => doFetch({ url: "/ngic-workmanship/wmsMaterieStore/queryStoreOne", params }),
        params: { "storePositionId": "linked", materieControlNo: "linked" },
        effectresult: {
          "supplierNo": "supplierNo",
          "supplierName": "supplierName",
          "stockNum": "stroeNum",
          "materieControlNo": "materieControlNo"
        }
      }
    }}
    style={{ marginLeft: 48 }}
    columns={[
      {
        title: "库位名称",
        dataIndex: "storePositionName",
        key: "storePositionId",
        search: false,
        valueType: "select",
        request: async (params) => {
          let res = await doFetch({ url: "/ngic-auth/sysStorePosition/queryByStoreId/selection", params: { storeId: params.storeId } });
          return res?.data?.dataList
        },
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        },
        params: { storeId: storeId },
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        },
      },
      {
        title: "批次号/SN号",
        dataIndex: "materieControlNo",
        key: "materieControlNo",
        search: false,
        valueType: "select",
        request: async (params) => {
          let res = await doFetch({ url: "/ngic-workmanship/wmsMaterieStore/queryPCList", params: { materieId: params.materieId, storePositionId: params.storePositionId } });
          return res?.data?.dataList
        },
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        },
        params: (row) => {
          return { materieId: record.materieId, storePositionId: row.storePositionId }
        },
        width: 200
      },
      {
        title: "下架数量",
        dataIndex: "outstroeNum",
        key: "outstroeNum",
        search: false,
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        },
        valueType: "digit"
      },
      {
        title: "供应商编号",
        dataIndex: "supplierNo",
        key: "supplierNo",
        search: false,
        readonly: true
      },
      {
        title: "供应商名称",
        dataIndex: "supplierName",
        key: "supplierName",
        search: false,
        readonly: true
      },
      {
        title: "库存数量",
        dataIndex: "stockNum",
        key: "stockNum",
        search: false,
        "readonly": true,
      },
      {
        title: "备注",
        dataIndex: "remark",
        key: "remark",
        search: false,
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        }
      },
      {
        title: "操作",
        valueType: "option",
        width: 70,
        render: (text, record, _, action) => [
          <a key="delete" onClick={() => { }}>
            删除
          </a>,
        ],
      }
    ]}
    value={value[record.id]}
    onChange={(vals) => {
      setvalue(s => ({
        ...s,
        [record.id]: vals
      }));
    }}
    pagination={false}
  />
}

const one = {
  "materieOutstoreNo": {
    "value": null,
    "type": "input",
    "title": "出库单号",
    "name": [
      "materieOutstoreNo"
    ],
    "required": false,
    "placeholder": "不填写系统自动生成"
  },
  "storeId": {
    "value": null,
    "type": "select",
    "title": "出库仓库",
    "name": [
      "storeId"
    ],
    "required": true,
    "options": {
      database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
      params: {}
    },
    "linked": true
  },
  "businessNo": {
    "value": null,
    "type": "input",
    "title": "相关单号",
    "name": [
      "businessNo"
    ],
    "required": false
  },
  "remark": {
    "value": null,
    "type": "textarea",
    "title": "备注",
    "name": [
      "remark"
    ],
    "required": false,
    "col": {
      "span": 24
    }
  },
  "materialList": {
    value: [],
    title: "物料信息",
    type: "table",
    col: { span: 24 },
    name: ["materialList"],
    required: true,
    linkconfig: {
      urlchangeval: {//根据url接口 改变某个value
        database: (params) => doFetch({ url: "/ngic-workmanship/wmsMaterieStockStore/queryStoreOne", params }),
        params: { "materieId": "linked" },
        effectresult: {
          "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
          "productionUnitName": "productionUnitName",
          "usableNum": "usableNum",
          "outstroeNum": "outstroeNum"
        }
      }
    },
    columns: [
      {
        "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
        "dataIndex": "materieId",
        "key": "materieId",
        "valueType": "select",
        "request": async () => {
          let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
          return res?.data?.dataList
        },
        "fieldProps": {
          allowClear: true,
          showSearch: true
        },
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        },
        editable: true
      },
      {
        "title": <span>出库数量 <b style={{ color: "red" }}>*</b></span>,
        "dataIndex": "outstroeNum",
        "key": "outstroeNum",
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        },
        valueType: "digit",
        editable: true
      },
      {
        "title": "可用库存",
        "dataIndex": "usableNum",
        "key": "usableNum",
        "readonly": 'usableNum'
      },
      {
        "title": "库存单位",
        "dataIndex": "productionUnitName",
        "key": "productionUnitName",
        "readonly": 'productionUnitName'
      },
      {
        title: "操作",
        valueType: "option",
        width: 70,
        render: (text, record, _, action) => [
          <a key="delete" onClick={() => { }}>
            删除
          </a>,
        ],
      },
    ],
    rowKey: "id",
  }
},
  two = {
    "materieOutstoreNo": {
      "value": null,
      "type": "input",
      "title": "出库单号",
      "name": [
        "materieOutstoreNo"
      ],
      "required": false,
      placeholder: "不填写系统自动生成"
    },
    "storeId": {
      "value": null,
      "type": "select",
      "title": "出库仓库",
      "name": [
        "storeId"
      ],
      "required": true,
      "options": {
        database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
        params: {}
      },
    },
    "businessNo": {
      "value": null,
      "type": "input",
      "title": "相关单号",
      "name": [
        "businessNo"
      ],
      "required": false
    },
    "remark": {
      "value": null,
      "type": "textarea",
      "title": "备注",
      "name": [
        "remark"
      ],
      "required": false,
      "col": {
        "span": 24
      }
    },
    "materialList": {
      value: [],
      title: "物料信息",
      type: "table",
      col: { span: 24 },
      name: ["materialList"],
      required: true,
      linkconfig: {
        urlchangeval: {//根据url接口 改变某个value
          database: (params) => doFetch({ url: "/ngic-workmanship/wmsMaterieStockStore/queryStoreOne", params }),
          params: { "materieId": "linked" },
          effectresult: {
            "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
            "productionUnitName": "productionUnitName",
            "usableNum": "usableNum",
            "outstroeNum": "outstroeNum"
          }
        }
      },
      columns: [
        {
          "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "materieId",
          "key": "materieId",
          "valueType": "select",
          "request": async () => {
            let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": <span>出库数量 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "outstroeNum",
          "key": "outstroeNum",
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
          valueType: "digit"
        },
        {
          "title": "可用库存",
          "dataIndex": "usableNum",
          "key": "usableNum",
          "readonly": 'usableNum'
        },
        {
          "title": "库存单位",
          "dataIndex": "productionUnitName",
          "key": "productionUnitName",
          "readonly": 'productionUnitName'
        },
        {
          title: "操作",
          valueType: "option",
          width: 70,
          render: (text, record, _, action) => [
            <a key="delete" onClick={() => { }}>
              删除
            </a>,
          ],
        },
      ],
      rowKey: "id",
    }
  },
  three = {
    "materieOutstoreNo": {
      "value": null,
      "type": "input",
      "title": "出库单号",
      "name": [
        "materieOutstoreNo"
      ],
      "required": false,
      placeholder: "不填写系统自动生成"
    },
    "storeId": {
      "value": null,
      "type": "select",
      "title": "出库仓库",
      "name": [
        "storeId"
      ],
      "required": true,
      "options": {
        database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
        params: {}
      },
    },
    "businessNo": {
      "value": null,
      "type": "input",
      "title": "相关单号",
      "name": [
        "businessNo"
      ],
      "required": false
    },
    "remark": {
      "value": null,
      "type": "textarea",
      "title": "备注",
      "name": [
        "remark"
      ],
      "required": false,
      "col": {
        "span": 24
      }
    },
    "materialList": {
      value: [],
      title: "物料信息",
      type: "table",
      col: { span: 24 },
      name: ["materialList"],
      required: true,
      linkconfig: {
        urlchangeval: {//根据url接口 改变某个value
          database: (params) => doFetch({ url: "/ngic-workmanship/wmsMaterieStockStore/queryStoreOne", params }),
          params: { "materieId": "linked" },
          effectresult: {
            "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
            "productionUnitName": "productionUnitName",
            "usableNum": "usableNum",
            "outstroeNum": "outstroeNum"
          }
        }
      },
      columns: [
        {
          "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "materieId",
          "key": "materieId",
          "valueType": "select",
          "request": async () => {
            let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": <span>出库数量 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "outstroeNum",
          "key": "outstroeNum",
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
          valueType: "digit"
        },
        {
          "title": "可用库存",
          "dataIndex": "usableNum",
          "key": "usableNum",
          "readonly": 'usableNum'
        },
        {
          "title": "库存单位",
          "dataIndex": "productionUnitName",
          "key": "productionUnitName",
          "readonly": 'productionUnitName'
        },
        {
          title: "操作",
          valueType: "option",
          width: 70,
          render: (text, record, _, action) => [
            <a key="delete" onClick={() => { }}>
              删除
            </a>,
          ],
        },
      ],
      rowKey: "id",
    }
  },
  four = {
    "materieOutstoreNo": {
      "value": null,
      "type": "input",
      "title": "出库单号",
      "name": [
        "materieOutstoreNo"
      ],
      "required": false,
      placeholder: "不填写系统自动生成"
    },
    "storeId": {
      "value": null,
      "type": "select",
      "title": "出库仓库",
      "name": [
        "storeId"
      ],
      "required": true,
      "options": {
        database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
        params: {}
      },
    },
    "businessNo": {
      "value": null,
      "type": "input",
      "title": "相关单号",
      "name": [
        "businessNo"
      ],
      "required": false
    },
    "remark": {
      "value": null,
      "type": "textarea",
      "title": "备注",
      "name": [
        "remark"
      ],
      "required": false,
      "col": {
        "span": 24
      }
    },
    "materialList": {
      value: [],
      title: "物料信息",
      type: "table",
      col: { span: 24 },
      name: ["materialList"],
      required: true,
      linkconfig: {
        urlchangeval: {//根据url接口 改变某个value
          database: (params) => doFetch({ url: "/ngic-workmanship/wmsMaterieStockStore/queryStoreOne", params }),
          params: { "materieId": "linked" },
          effectresult: {
            "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
            "productionUnitName": "productionUnitName",
            "usableNum": "usableNum",
            "outstroeNum": "outstroeNum"
          }
        }
      },
      columns: [
        {
          "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "materieId",
          "key": "materieId",
          "valueType": "select",
          "request": async () => {
            let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": <span>出库数量 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "outstroeNum",
          "key": "outstroeNum",
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
          valueType: "digit"
        },
        {
          "title": "可用库存",
          "dataIndex": "usableNum",
          "key": "usableNum",
          "readonly": 'usableNum'
        },
        {
          "title": "库存单位",
          "dataIndex": "productionUnitName",
          "key": "productionUnitName",
          "readonly": 'productionUnitName'
        },
        {
          title: "操作",
          valueType: "option",
          width: 70,
          render: (text, record, _, action) => [
            <a key="delete" onClick={() => { }}>
              删除
            </a>,
          ],
        },
      ],
      rowKey: "id",
    }
  },
  detail = (setselected, dom) => ({
    totalCard: [
      //物料详情
      {
        cardTitle: "基本信息",
        itemData: [
          {
            title: "出库单号",
            key: "materieOutstoreNo",
          },
          {
            title: "出库类型",
            key: "outstoreTypeName",
          },
          {
            title: "出库仓库",
            key: "storeName",
          },
          {
            title: "相关单号",
            key: "businessNo",
          },
          {
            title: "创建人",
            key: "createUserName",
          },
          {
            title: "创建时间",
            key: "createTime",
          },
          {
            title: "状态",
            key: "statusName",
          },
          {
            title: "完成时间",
            key: "finishTime",
          },
          {
            title: "备注",
            key: "remark",
            noshow: "100%",
          },
          {
            title: "工单条形码",
            key: "qrCodeUrl",
            type: "img",
            noshow: true,
            width: 100,
          },
        ],
      },
      {
        cardTitle: "物料信息列表",
        extraContent: dom,
        itemData: [
          {
            key: "materialList",
            type: "table",
            col: { span: 24 },
            columns: [
              {
                title: "物料编码 - 名称",
                dataIndex: "materieName",
                key: "materieName",
                search: false,
                render: (dom, row) => {
                  return (row.materieCode ?? '') + " - " + (row.materieName ?? '')
                }
              },
              {
                title: "出库数量",
                dataIndex: "outstroeNum",
                key: "outstroeNum",
                search: false,
              },
              {
                title: "库存单位",
                dataIndex: "productionUnitName",
                key: "productionUnitName",
                search: false,
              },
              {
                title: "未下架数量",
                dataIndex: "remainderNums",
                key: "remainderNums",
                search: false,
              },
            ],
            pagination: "false",
            rowKey: "id",
            expandable: {
              expandedRowRender: record => <Table
                style={{ marginLeft: 48 }}
                columns={[
                  {
                    title: "库位名称",
                    dataIndex: "storePositionName",
                    key: "storePositionName",
                    search: false,
                    "formItemProps": () => {
                      return {
                        rules: [{ required: true, message: '此项为必填项' }],
                      };
                    },
                  },
                  {
                    title: "批次号/SN号",
                    dataIndex: "materieControlNo",
                    key: "materieControlNo",
                    search: false,
                  },
                  {
                    title: "供应商编号-名称",
                    dataIndex: "supplierNo",
                    key: "supplierNo",
                    search: false,
                    render: (dom, row) => {
                      return (row?.supplierNo ?? '') + " - " + (row?.supplierName ?? '')
                    }
                  },
                  {
                    title: "下架数量",
                    dataIndex: "outstroeNum",
                    key: "outstroeNum",
                    search: false,
                  }

                ]}
                dataSource={record.downloadList}
                pagination={false}
              />,
            },
            rowSelection: {
              onChange: (selectedRowKeys, selectedRows) => {
                setselected(selectedRows)
              },
            }
          },
        ],
      },
      {
        cardTitle: "强制关单信息",
        itemData: [
          {
            title: "关单人",
            key: "closeUserName",
          },
          {
            title: "关单时间",
            key: "closeTime",
          }
        ],
      },
      {
        cardTitle: "下架明细",
        noPrint: true,
        itemData: [
          {
            key: "materialDownloadList",
            type: "table",
            col: { span: 24 },
            columns: [
              {
                title: "物料编码 - 名称",
                dataIndex: "materieName",
                key: "materieName",
                search: false,
                render: (dom, row) => {
                  return (row.materieCode ?? '') + " - " + (row.materieName ?? '')
                }
              },
              {
                title: "出库数量",
                dataIndex: "outstroeNum",
                key: "outstroeNum",
                search: false,
              },
              {
                title: "库存单位",
                dataIndex: "productionUnitName",
                key: "productionUnitName",
                search: false,
              },
            ],
            expandable: {
              defaultExpandAllRows: true,
              expandedRowRender: record => <Table
                style={{ marginLeft: 48 }}
                columns={[
                  {
                    title: "库位名称",
                    dataIndex: "storePositionName",
                    key: "storePositionName",
                    search: false,
                    "formItemProps": () => {
                      return {
                        rules: [{ required: true, message: '此项为必填项' }],
                      };
                    },
                  },
                  {
                    title: "批次号/SN号",
                    dataIndex: "materieControlNo",
                    key: "materieControlNo",
                    search: false,
                  },
                  {
                    title: "供应商编号 - 名称",
                    dataIndex: "supplierNo",
                    key: "supplierNo",
                    search: false,
                    render: (dom, row) => {
                      return (row.supplierNo ?? '') + " - " + (row.supplierName ?? '')
                    }
                  },
                  {
                    title: "下架数量",
                    dataIndex: "outstroeNum",
                    key: "outstroeNum",
                    search: false,
                  }
                  ,
                  {
                    title: "备注",
                    dataIndex: "remark",
                    key: "remark",
                    search: false,
                  }
                  ,
                  {
                    title: "操作人",
                    dataIndex: "downloadUserName",
                    key: "downloadUserName",
                    search: false,
                  }
                  ,
                  {
                    title: "操作时间",
                    dataIndex: "downloadTime",
                    key: "downloadTime",
                    search: false,
                  }
                ]}
                dataSource={record.downloadList}
                pagination={false}
              />,
            },
            pagination: "false"
          },
        ],
      },
    ]
  }),
  dooutside = (fid, storeId) => ({
    totalCard: [
      //物料详情
      {
        cardTitle: "基本信息",
        itemData: [
          {
            title: "出库单号",
            key: "materieOutstoreNo",
          },
          {
            title: "出库类型",
            key: "outstoreTypeName",
          },
          {
            title: "出库仓库",
            key: "storeName",
          },
          {
            title: "相关单号",
            key: "businessNo",
          },
          {
            title: "备注",
            key: "remark",
          },
          {
            title: "创建人",
            key: "createUserName",
          },
          {
            title: "创建时间",
            key: "createTime",
          },
          {
            title: "状态",
            key: "statusName"
          }
        ],
      },
      {
        cardTitle: "物料信息列表",
        extra: true,
        extrapath: "/ngic-workmanship/wmsMaterieOutstore/download",
        extrakey: "submits",//redux key
        itemData: [
          {
            key: "materialList",
            type: "table",
            col: { span: 24 },
            columns: [
              {
                title: "物料编码 - 名称",
                dataIndex: "materieName",
                key: "materieName",
                search: false,
                render: (dom, row) => {
                  return (row.materieCode ?? '') + " - " + (row.materieName ?? '')
                }
              },
              {
                title: "出库数量",
                dataIndex: "outstroeNum",
                key: "outstroeNum",
                search: false,
              },
              {
                title: "库存单位",
                dataIndex: "productionUnitName",
                key: "productionUnitName",
                search: false,
              },
              {
                title: "未下架数量",
                dataIndex: "remainderNums",
                key: "remainderNums",
                search: false,
              }
            ],
            expandable: {
              expandedRowRender: record => <EditUpload record={record} fid={fid} storeId={storeId} />,
            }
          },
        ],
      },
    ]
  });




export default {
  one,
  two,
  three,
  four,
  detail,
  dooutside
};