import { ref } from 'vue';
import { http } from '/nerv-lib/util';
import { origanizemanage } from '/@/api/origanizemanage';
import { carbonEmissionFactorLibrary } from '/@/api/carbonEmissionFactorLibrary';
export const formConfig = (disabled) => {
  return ref([
    {
      field: 'fields',
      component: 'NsChildForm',
      componentProps: {
        schemas: [
          {
            label: '排放源',
            field: 'emissionSources',
            component: 'NsInput',
            componentProps: {
              placeholder: '请输入排放源',
              maxLength: 20,
            },
            rules: [
              {
                required: true,
                message: '请输入排放源',
              },
            ],
          },
          {
            field: 'emissionType',
            label: '排放分类',
            component: 'NsCascader',
            fieldMap: ['emissionType'],
            componentProps: {
              placeholder: '请选择排放分类',
              api: carbonEmissionFactorLibrary.getCarbonFactorTree,
              fieldNames: { label: 'emissionName', value: 'id' },
              showSearch: true,
            },
            rules: [
              {
                required: true,
                message: '请选择排放分类',
              },
            ],
          },
          {
            field: 'emissionGas',
            label: '排放气体',
            component: 'NsSelect',
            componentProps: {
              allowClear: true,
              placeholder: '请选择排放气体',
              options: [
                {
                  label: 'CO2',
                  value: 1,
                },
                {
                  label: 'CO2e',
                  value: 2,
                },
                {
                  label: 'SF6',
                  value: 3,
                },
                {
                  label: 'CH4',
                  value: 4,
                },
                {
                  label: 'PFCs',
                  value: 5,
                },
                {
                  label: 'HFCs',
                  value: 6,
                },
              ],
            },
            rules: [
              {
                required: true,
                message: '请选择排放气体',
              },
            ],
          },
          // {
          //   field: 'emissionProcess',
          //   label: '排放环节',
          //   component: 'NsSelectApi',
          //   componentProps: {
          //     api: carbonEmissionFactorLibrary.getEmissionProcess,
          //     params: {
          //       emissionType: sessionStorage.getItem('checkedTreeNode'),
          //     },
          //     resultField: 'data',
          //     labelField: 'emissionProcess',
          //     valueField: 'emissionProcess',
          //     immediate: true,
          //     autoSelectFirst: false,
          //     filterOption:false,
          //     showSearch:true,
          //     autoClearSearchValue:false
          //   },
          // },
          {
            label: '排放环节',
            field: 'emissionProcess',
            component: 'NsInput',
            componentProps: {
              placeholder: '请输入排放环节',
              maxLength: 20,
            },
            rules: [
              {
                required: true,
                message: '请输入排放环节',
              },
            ],
          },
          {
            label: '排放因子',
            field: 'emissionFactors',
            component: 'NsInputNumber',
            componentProps: {
              placeholder: '请输入排放因子值',
              maxLength: 20,
            },
            rules: [
              {
                required: true,
                message: '请输入排放因子值',
                trigger: 'change',
              },
            ],
          },
          {
            field: 'carbonEmissionPrefix',
            label: '碳排前缀',
            component: 'NsSelect',
            componentProps: {
              disabled: true,
              allowClear: true,
              defaultValue: 't',
              placeholder: '请选择碳排前缀',
              options: [
                {
                  label: 'g',
                  value: 'g',
                },
                {
                  label: 'kg',
                  value: 'kg',
                },
                {
                  label: 't',
                  value: 't',
                },
              ],
            },
            rules: [
              {
                required: true,
                message: '请选择碳排前缀',
              },
            ],
          },
          {
            label: '碳排后缀',
            field: 'carbonEmissionSuffix',
            component: 'NsInput',
            componentProps: {
              placeholder: '请输入碳排后缀',
              maxLength: 20,
            },
            rules: [
              {
                required: true,
                message: '请输入碳排后缀',
              },
            ],
          },
          {
            label: '已引用数',
            field: 'numberOfReferences',
            component: 'NsInput',
            componentProps: {
              defaultValue: 10,
              disabled: true,
              maxLength: 20,
            },
          },
          {
            label: '参考文献',
            field: 'reference',
            component: 'NsTextarea',
            componentProps: {
              placeholder: '请输入参考文献',
              maxLength: 300,
              showCount: true,
            },
          },
        ],
      },
    },
  ]);
};
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];
            });
          }
        },
      },
    },
  ]);
};
