// ============================================================
// SRM 统一枚举常量
// 所有值严格对齐后端枚举定义 (yudao-module-srm/enums/)
// ============================================================

/** 选项类型 (Select/RadioGroup通用) */
export interface EnumOption {
  label: string;
  value: number | string;
}

/** CellTag 数据类型 */
export interface CellTagItem {
  value: number | string;
  color: string;
}

// ========== 供应商 (字段值对齐 CommonStatusEnum + SupplierTypeEnum) ==========

/** 供应商状态 — 对齐 CommonStatusEnum (0=开启 1=关闭) */
export const SUPPLIER_STATUS = {
  ENABLE: 0,
  DISABLE: 1,
} as const;

export const SUPPLIER_STATUS_OPTIONS: EnumOption[] = [
  { label: '开启', value: 0 },
  { label: '关闭', value: 1 },
];

export const SUPPLIER_STATUS_CELLTAG: { data: CellTagItem[]; labels: Record<number, string> } = {
  data: [
    { value: 0, color: 'green' },
    { value: 1, color: 'red' },
  ],
  labels: { 0: '开启', 1: '关闭' },
};

/** 供应商类型 — 对齐 SupplierTypeEnum (1=生产型 2=贸易型 3=服务型 4=其他) */
export const SUPPLIER_TYPE = {
  PRODUCTION: 1,
  TRADING: 2,
  SERVICE: 3,
  OTHER: 4,
} as const;

export const SUPPLIER_TYPE_OPTIONS: EnumOption[] = [
  { label: '生产型', value: 1 },
  { label: '贸易型', value: 2 },
  { label: '服务型', value: 3 },
  { label: '其他', value: 4 },
];

export const SUPPLIER_TYPE_CELLTAG: { data: CellTagItem[]; labels: Record<number, string> } = {
  data: [
    { value: 1, color: 'blue' },
    { value: 2, color: 'green' },
    { value: 3, color: 'orange' },
    { value: 4, color: 'default' },
  ],
  labels: { 1: '生产型', 2: '贸易型', 3: '服务型', 4: '其他' },
};

// ========== 准入申请 — 对齐 SupplierApplyStatusEnum (0/10/20/30/40/50) ==========

export const APPLY_STATUS = {
  DRAFT: 0,
  PENDING_PURCHASE: 10,
  PENDING_QUALITY: 20,
  PENDING_FINANCE: 30,
  APPROVED: 40,
  REJECTED: 50,
} as const;

export const APPLY_STATUS_OPTIONS: EnumOption[] = [
  { label: '待提交', value: 0 },
  { label: '待采购审核', value: 10 },
  { label: '待质量审核', value: 20 },
  { label: '待财务审核', value: 30 },
  { label: '已通过', value: 40 },
  { label: '已拒绝', value: 50 },
];

export const APPLY_STATUS_CELLTAG: { data: CellTagItem[]; labels: Record<number, string> } = {
  data: [
    { value: 0, color: 'gray' },
    { value: 10, color: 'blue' },
    { value: 20, color: 'orange' },
    { value: 30, color: 'purple' },
    { value: 40, color: 'green' },
    { value: 50, color: 'red' },
  ],
  labels: { 0: '待提交', 10: '待采购审核', 20: '待质量审核', 30: '待财务审核', 40: '已通过', 50: '已拒绝' },
};

// ========== 资质证书 — 对齐 CertificateTypeEnum (1=营业执照 2=认证证书 3=检测报告 4=其他) ==========

export const CERTIFICATE_TYPE = {
  BUSINESS_LICENSE: 1,
  CERTIFICATION: 2,
  INSPECTION_REPORT: 3,
  OTHER: 4,
} as const;

export const CERTIFICATE_TYPE_OPTIONS: EnumOption[] = [
  { label: '营业执照', value: 1 },
  { label: '认证证书', value: 2 },
  { label: '检测报告', value: 3 },
  { label: '其他', value: 4 },
];

export const CERTIFICATE_TYPE_CELLTAG: { data: CellTagItem[]; labels: Record<number, string> } = {
  data: [
    { value: 1, color: 'blue' },
    { value: 2, color: 'green' },
    { value: 3, color: 'orange' },
    { value: 4, color: 'default' },
  ],
  labels: { 1: '营业执照', 2: '认证证书', 3: '检测报告', 4: '其他' },
};

// ========== 绩效评价 — 后端 evaluationLevel 为 String 类型 (A/B/C/D) ==========

export const EVALUATION_GRADE = {
  A: 'A',
  B: 'B',
  C: 'C',
  D: 'D',
} as const;

export const EVALUATION_GRADE_CELLTAG: { data: CellTagItem[] } = {
  data: [
    { value: 'A', color: 'green' },
    { value: 'B', color: 'blue' },
    { value: 'C', color: 'orange' },
    { value: 'D', color: 'red' },
  ],
};

/** 综合评分区间 — 后端计算: >=90→A, >=80→B, >=70→C, <70→D */
export const COMPOSITE_SCORE_CELLTAG: { data: CellTagItem[] } = {
  data: [
    { value: 90, color: 'green' },
    { value: 80, color: 'blue' },
    { value: 70, color: 'orange' },
    { value: 0, color: 'red' },
  ],
};

// ========== 招标项目 — 对齐 TenderStatusEnum (0/1/2/3/4/5) + TenderTypeEnum (1/2/3) ==========

/** 招标类型 — 对齐 TenderTypeEnum (1=公开招标 2=邀请招标 3=竞争性谈判) */
export const TENDER_TYPE = {
  PUBLIC: 1,
  INVITATION: 2,
  COMPETITIVE_NEGOTIATION: 3,
} as const;

export const TENDER_TYPE_OPTIONS: EnumOption[] = [
  { label: '公开招标', value: 1 },
  { label: '邀请招标', value: 2 },
  { label: '竞争性谈判', value: 3 },
];

export const TENDER_TYPE_CELLTAG: { data: CellTagItem[]; labels: Record<number, string> } = {
  data: [
    { value: 1, color: 'blue' },
    { value: 2, color: 'blue' },
    { value: 3, color: 'green' },
  ],
  labels: { 1: '公开招标', 2: '邀请招标', 3: '竞争性谈判' },
};

/** 招标项目状态 — 对齐 TenderStatusEnum (0=草稿 1=发布中 2=投标中 3=评标中 4=已定标 5=已关闭) */
export const TENDER_STATUS = {
  DRAFT: 0,
  PUBLISHED: 1,
  BIDDING: 2,
  EVALUATING: 3,
  AWARDED: 4,
  CLOSED: 5,
} as const;

export const TENDER_STATUS_OPTIONS: EnumOption[] = [
  { label: '草稿', value: 0 },
  { label: '发布中', value: 1 },
  { label: '投标中', value: 2 },
  { label: '评标中', value: 3 },
  { label: '已定标', value: 4 },
  { label: '已关闭', value: 5 },
];

export const TENDER_STATUS_CELLTAG: { data: CellTagItem[]; labels: Record<number, string> } = {
  data: [
    { value: 0, color: 'gray' },
    { value: 1, color: 'blue' },
    { value: 2, color: 'cyan' },
    { value: 3, color: 'orange' },
    { value: 4, color: 'green' },
    { value: 5, color: 'red' },
  ],
  labels: { 0: '草稿', 1: '发布中', 2: '投标中', 3: '评标中', 4: '已定标', 5: '已关闭' },
};

/** 招标状态 Ant Design Tag 颜色映射 */
export const TENDER_STATUS_COLORS: Record<number, string> = {
  [TENDER_STATUS.DRAFT]: 'default',
  [TENDER_STATUS.PUBLISHED]: 'blue',
  [TENDER_STATUS.BIDDING]: 'cyan',
  [TENDER_STATUS.EVALUATING]: 'orange',
  [TENDER_STATUS.AWARDED]: 'green',
  [TENDER_STATUS.CLOSED]: 'red',
};

// ========== 投标 — 对齐 BidStatusEnum (0=报名 10=已投标 20=撤标 30=中标 40=未中标) ==========

export const BID_STATUS = {
  REGISTERED: 0,
  BID: 10,
  WITHDRAWN: 20,
  WIN: 30,
  LOSE: 40,
} as const;

export const BID_STATUS_MAP: Record<number, string> = {
  0: '报名',
  10: '已投标',
  20: '撤标',
  30: '中标',
  40: '未中标',
};

// ========== 定标 — 对齐 AwardStatusEnum (0=待审批 10=已定标 20=已生成订单) ==========

export const AWARD_STATUS = {
  PENDING_APPROVAL: 0,
  AWARDED: 10,
  ORDER_GENERATED: 20,
} as const;

export const AWARD_STATUS_MAP: Record<number, string> = {
  0: '待审批',
  10: '已定标',
  20: '已生成订单',
};

// ========== 工具函数 ==========

/** 根据值获取标签 */
export function getLabel(map: Record<number, string>, value?: number): string {
  return value !== undefined ? map[value] || String(value) : '';
}

/** 将 options 数组转为 labels 映射 */
export function optionsToLabels(options: EnumOption[]): Record<number, string> {
  const labels: Record<number, string> = {};
  for (const opt of options) {
    if (typeof opt.value === 'number') {
      labels[opt.value] = opt.label;
    }
  }
  return labels;
}
