export interface UserFieldRule {
  visible: boolean;
  required: boolean;
}

export interface UserFieldConfig {
  form: Record<string, UserFieldRule>;
  list: Record<string, UserFieldRule>;
}

export const userFormFields = [
  { field: 'account', label: '账户', core: true },
  { field: 'realName', label: '姓名', core: true },
  { field: 'jobNumber', label: '工号' },
  { field: 'positionId', label: '岗位' },
  { field: 'roleId', label: '角色配置' },
  { field: 'gender', label: '性别', defaultRequired: true },
  { field: 'email', label: '电子邮箱', hidden: true },
  { field: 'mobilePhone', label: '手机号码' },
  { field: 'ranks', label: '职级', hidden: true },
  { field: 'sortCode', label: '排序' },
  { field: 'enabledMark', label: '状态' },
  { field: 'description', label: '说明' },
  { field: 'headIcon', label: '头像' },
  { field: 'nation', label: '民族', hidden: true },
  { field: 'nativePlace', label: '籍贯', hidden: true },
  { field: 'certificatesType', label: '证件类型', hidden: true },
  { field: 'entryDate', label: '入职时间', hidden: true },
  { field: 'certificatesNumber', label: '证件号码', hidden: true },
  { field: 'education', label: '文化程度', hidden: true },
  { field: 'birthday', label: '出生年月', hidden: true },
  { field: 'telePhone', label: '办公电话', hidden: true },
  { field: 'landline', label: '办公座机', hidden: true },
  { field: 'urgentContacts', label: '紧急联系', hidden: true },
  { field: 'urgentTelePhone', label: '紧急电话', hidden: true },
  { field: 'postalAddress', label: '通讯地址', hidden: true },
] as const;

export const userListFields = [
  { field: 'account', label: '账号' },
  { field: 'realName', label: '姓名' },
  { field: 'jobNumber', label: '工号' },
  { field: 'gender', label: '性别' },
  { field: 'mobilePhone', label: '手机' },
  { field: 'position', label: '所属岗位' },
  { field: 'creatorTime', label: '创建时间' },
  { field: 'lastModifyTime', label: '更新时间' },
  { field: 'sortCode', label: '排序' },
  { field: 'enabledMark', label: '状态' },
  { field: 'disableTime', label: '禁用时间' },
] as const;

export function normalizeUserFieldConfig(data?: Partial<UserFieldConfig>): UserFieldConfig {
  return {
    form: Object.fromEntries(
      userFormFields.map(({ field, ...meta }) => {
        const core = 'core' in meta && meta.core;
        const saved = data?.form?.[field];
        const visible = core || (saved?.visible ?? !('hidden' in meta && meta.hidden));
        const defaultRequired = 'defaultRequired' in meta && meta.defaultRequired;
        return [field, { visible, required: core || (visible && (saved?.required ?? !!defaultRequired)) }];
      }),
    ),
    list: Object.fromEntries(userListFields.map(({ field }) => [field, { visible: data?.list?.[field]?.visible ?? true, required: false }])),
  };
}
