import { ref, reactive, computed, toRefs } from "vue";
import { Table } from "@/hooks/interface";
import { ColumnProps } from "@/components/LjVxeTable/interface";
import { ALLOW_EDIT_STATE } from "@/config/index";
import { SaveDept, DeleteDept, AuditDept } from "@/api/modules/saleprice";
import { ElMessage, ElMessageBox } from "element-plus";
interface defaultState {
  /**
   * @description 单据当前状态
   */
  orderStatus: string;
  /**
   * @description 列表Ref
   */
  VxeTableRef: any;
  /**
   * @description 详情页Ref
   */
  LjDetailRef: any;
}

const state = reactive<defaultState>({
  orderStatus: "",
  VxeTableRef: null,
  LjDetailRef: null
});
/**
 * @description 表格多选数据操作
 * @param {String} rowKey 当表格可以多选时，所指定的 id
 * */
export const useHooks = (t?: any) => {
  // 表格配置项
  const columns: ColumnProps<any>[] = [
    { type: "checkbox", width: 80, fixed: "left" },
    {
      field: "deptname",
      title: "部门名称",
      basicinfo: {
        el: "input",
        span: 2,
        editable: ALLOW_EDIT_STATE,
        rules: [{ required: true }]
      }
    },
    {
      field: "pricelistid",
      title: "价格表",
      basicinfo: {
        el: "select",
        span: 2,
        editable: ALLOW_EDIT_STATE,
        rules: [{ required: true }],
        defaultValue: 0
      }
    },
    {
      field: "springtypeid",
      title: "弹簧分类",
      basicinfo: {
        el: "select",
        span: 1,
        editable: ALLOW_EDIT_STATE,
        defaultValue: 0,
        rules: [{ required: true }]
      }
    },
    {
      field: "moneyrate",
      title: "汇率",
      basicinfo: {
        el: "input",
        span: 1,
        editable: ALLOW_EDIT_STATE,
        props: {
          placeholder: "请输入汇率"
        },
        rules: [{ required: true, pattern: new RegExp(/^\d+(\.\d+)?$/), message: "汇率不能为0", trigger: "change" }]
      }
    },
    {
      field: "profitrate",
      title: "利润率",
      basicinfo: {
        el: "input",
        span: 1,
        editable: ALLOW_EDIT_STATE,
        props: {
          placeholder: "请输入利润率"
        },
        rules: [{ required: true, pattern: new RegExp(/^\d+(\.\d+)?$/), message: "利润率不能为0", trigger: "change" }]
      }
    },
    {
      field: "discount",
      title: "折扣率",
      basicinfo: {
        el: "input",
        span: 1,
        editable: ALLOW_EDIT_STATE,
        props: {
          placeholder: "请输入折扣率"
        },
        rules: [{ required: true, pattern: new RegExp(/^\d+(\.\d+)?$/), message: "折扣率不能为0", trigger: "change" }]
      }
    },
    {
      field: "if_rate_auto",
      title: "是否自动读取汇率",
      datatype: "checkbox",
      basicinfo: {
        el: "switch",
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "createtime",
      title: "建立时间",
      basicinfo: {
        visible: false
      }
    },
    {
      field: "modemp",
      title: "修改人",
      basicinfo: {
        visible: false
      }
    },
    {
      field: "moddate",
      title: "修改时间",
      basicinfo: {
        visible: false
      }
    },
    {
      field: "auditemp",
      title: "审核人",
      basicinfo: {
        visible: false
      }
    },
    {
      field: "audidate",
      title: "审核时间",
      basicinfo: {
        visible: false
      }
    },
    {
      field: "manage_amt",
      title: "部门管理费",
      basicinfo: {
        el: "input",
        editable: ALLOW_EDIT_STATE,
        span: 1,
        props: {
          placeholder: "请输入部门管理费"
        }
        // rules: [{ trigger: "change" }]
      }
    },
    {
      field: "mtrltype",
      title: "默认物料类别",
      basicinfo: {
        el: "tree-select",
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "managerate",
      title: "管理费用点",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "com_profitrate",
      title: "公司利润率",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "dannum1_rate",
      title: "散单利润浮动",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "dannum2_rate",
      title: "标准利润浮动",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "dannum3_rate",
      title: "大单利润浮动",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "dannum4_rate",
      title: "小单利润浮动",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    },
    {
      field: "taxes_rate",
      title: "非报关产品税金补偿",
      basicinfo: {
        el: "input",
        props: {
          type: "number"
        },
        span: 2,
        editable: ALLOW_EDIT_STATE
      }
    }
  ];

  // 保存
  const fSave = (param: any) => {
    return new Promise((resolve, reject) => {
      ElMessageBox.confirm("是否确定要保存吗?", "询问", {
        confirmButtonText: "是",
        cancelButtonText: "否",
        type: "warning"
      })
        .then(() => {
          SaveDept(param).then(() => {
            ElMessage.success("保存成功！");
            state.VxeTableRef?.refresh();
            resolve({});
          });
        })
        .catch(() => {
          ElMessage({
            type: "info",
            message: "操作取消"
          });
        });
    });
  };

  // 删除
  const fDelete = () => {
    const checkDate = state.VxeTableRef?.element.getCheckboxRecords();
    if (checkDate.length === 0) {
      ElMessage.error("请选择要删除的数据！");
      return;
    }
    const delArr = checkDate.map((item: any) => {
      return { deptid: parseInt(item.deptid), deptname: item.deptname };
    });
    ElMessageBox.confirm("是否确定要删除吗?", "询问", {
      confirmButtonText: "是",
      cancelButtonText: "否",
      type: "warning"
    })
      .then(() => {
        DeleteDept({ list: delArr }).then(() => {
          ElMessage.success("删除成功！");
          state.VxeTableRef?.refresh();
        });
      })
      .catch(() => {
        ElMessage({
          type: "info",
          message: "操作取消"
        });
      });
  };

  // 审核
  const fAudit = type => {
    let operate = "审核";
    switch (type) {
      case 1:
        operate = "撤审";
        break;
      case 2:
        operate = "反禁用";
        break;
      case 3:
        operate = "禁用";
        break;
      default:
        operate = "审核";
        break;
    }

    const checkDate = state.VxeTableRef?.element.getCheckboxRecords();
    if (checkDate.length === 0) {
      ElMessage.error(`请选择要${operate}的数据！`);
      return;
    }
    const delArr = checkDate.map((item: any) => {
      return { deptid: parseInt(item.deptid) };
    });
    ElMessageBox.confirm(`是否确定要${operate}吗?`, "询问", {
      confirmButtonText: "是",
      cancelButtonText: "否",
      type: "warning"
    })
      .then(() => {
        AuditDept({ list: delArr, type }).then(() => {
          ElMessage.success(`${operate}成功！`);
          state.VxeTableRef?.refresh();
        });
      })
      .catch(() => {
        ElMessage({
          type: "info",
          message: "操作取消"
        });
      });
  };

  return {
    ...toRefs(state),
    columns,
    fSave,
    fDelete,
    fAudit
  };
};
