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, formRef }) => {
  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: "批次号",
          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/selectboxByStoreId",
              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: "",

        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: "批次号",
                      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: "批次号",
                      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,
};
