import { ref } from 'vue';
import { http } from '/nerv-lib/util';
import { origanizemanage } from '/@/api/origanizemanage';
export const formConfig = (disabled) => {
  return ref([
    {
      label: '账号',
      field: 'accountNo',
      component: 'NsInput',
      componentProps: {
        placeholder: '请输入账号',
        maxLength: 20,
        disabled,
      },
      rules: [
        {
          required: true,
          message: '请输入账号',
        },
      ],
    },
    {
      label: '姓名',
      field: 'realName',
      component: 'NsInput',
      componentProps: {
        placeholder: '请输入姓名',
        maxLength: 20,
      },
      rules: [
        {
          required: true,
          message: '请输入姓名',
        },
      ],
    },
    {
      label: '性别',
      field: 'sex',
      component: 'NsRadioGroup',
      defaultValue: '男',
      componentProps: {
        radioType: 'radio',
        options: [
          { label: '男', value: '男' },
          { label: '女', value: '女' },
        ],
      },
    },
    {
      label: '手机号',
      field: 'telephone',
      component: 'NsInput',
      componentProps: {
        placeholder: '请输入手机号',
        maxLength: 11,
      },
      rules: [
        {
          required: true,
          message: '请输入正确手机号格式',
          pattern: /^[1][3-9][0-9]{9}$/,
        },
      ],
    },
    {
      label: '邮箱',
      field: 'email',
      component: 'NsInput',
      componentProps: {
        placeholder: '请输入邮箱',
        maxLength: 30,
      },
      rules: [
        {
          pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
          message: '请输入正确的邮箱格式',
          trigger: 'blur',
        },
      ],
    },
    {
      label: '组织关系',
      field: 'orgName',
      component: 'NsInput',
      defaultValue: JSON.parse(sessionStorage.getItem(import.meta.env.VITE_PUBLIC_PATH)).orgName,
      componentProps: {
        disabled: true,
        maxLength: 30,
      },
    },
  ]);
};
const options = ref([]);

const getUserPerList = (transform, params = {}) => {
  return http.post(origanizemanage.queryUserPerList, { ...params }).then((res) => {
    return res.data?.map((item) => {
      item = { ...item, ...transform(item) };
      return item;
    });
  });
};
export const formConfig2 = (casData: any) => {
  return ref([
    {
      field: 'information',
      component: 'NsCascader',
      componentProps: {
        placeholder: '请选择',
        displayRender: ({ labels, selectedOptions }: any) => {
          console.log(labels, selectedOptions);

          casData.value = selectedOptions.map(({ label, value }) => {
            return { label, value };
          });
          return labels.join('/');
        },
        loadData: (selectedOptions, options) => {
          console.log(selectedOptions, options, 'selectedOptions, options');

          const targetOption = selectedOptions[selectedOptions.length - 1];
          let transForm, params;
          // load options lazily
          if (!selectedOptions.length) {
            transForm = (data) => {
              data['label'] = data.orgName;
              data['value'] = data.orgId;
              data['isLeaf'] = false;
              data['level'] = 1;
              return data;
            };
            getUserPerList(transForm).then((res) => {
              options.value = [...res];
            });
          }
          const id = targetOption?.value;
          const level = targetOption?.level;
          if (targetOption) {
            targetOption.loading = true;
          }

          if (level === 1) {
            transForm = (data) => {
              data['label'] = data.deptName;
              data['value'] = data.deptId;
              data['isLeaf'] = false;
              data['level'] = 2;
              return data;
            };
            params = { orgId: id };
          } else if (level === 2) {
            transForm = (data) => {
              data['label'] = data.roleName;
              data['value'] = data.roleId;
              data['level'] = 3;
              return data;
            };
            params = { deptId: id };
          }
          if (targetOption) {
            getUserPerList(transForm, { ...params }).then((res) => {
              targetOption.loading = false;
              targetOption.children = [...res];
            });
          }
        },
      },
    },
  ]);
};
