/**
 * Performance 模块 — 数据质量校验专属检查
 *
 * 导出 checks 数组，每个元素是一个检查函数。
 * 通用检查（权限种子/FK/枚举）由主脚本自动执行，无需在此重复。
 */

export interface QualityCheck {
  name: string;
  fn: (query: (sql: string) => string, queryRows: (sql: string) => string[]) => { status: 'pass' | 'fail' | 'warn'; detail: string };
}

export const checks: QualityCheck[] = [
  {
    name: '360 模板 dimensions 非空且结构完整',
    fn: (_query, queryRows) => {
      const rows = queryRows(
        "SELECT id, name, dimensions::text FROM platform_performance.evaluation_360_template WHERE deleted_at IS NULL"
      );
      if (rows.length === 0) return { status: 'warn', detail: '无 360 模板数据' };
      const issues: string[] = [];
      for (const row of rows) {
        const [id, name, dimsJson] = row.split('|');
        try {
          const dims = JSON.parse(dimsJson);
          if (!Array.isArray(dims) || dims.length === 0) {
            issues.push(`模板 "${name}" (${id}): dimensions 为空数组`);
            continue;
          }
          for (let i = 0; i < dims.length; i++) {
            const dim = dims[i];
            if (!dim || typeof dim !== 'object' || !dim.id || !dim.name) {
              issues.push(`模板 "${name}" (${id}): dimensions[${i}] 缺少 id 或 name`);
            }
          }
        } catch {
          issues.push(`模板 "${name}" (${id}): dimensions JSON 解析失败`);
        }
      }
      if (issues.length > 0) return { status: 'fail', detail: issues.join('\n  ') };
      return { status: 'pass', detail: `${rows.length} 个模板全部结构正确` };
    },
  },
  {
    name: '等级配置 grades 非空且有 code+name+minScore+maxScore',
    fn: (_query, queryRows) => {
      const rows = queryRows(
        "SELECT id, name, grades::text FROM platform_performance.grade_config WHERE deleted_at IS NULL"
      );
      if (rows.length === 0) return { status: 'warn', detail: '无等级配置数据' };
      const issues: string[] = [];
      for (const row of rows) {
        const parts = row.split('|');
        const id = parts[0];
        const name = parts[1];
        const gradesJson = parts.slice(2).join('|');
        try {
          const grades = JSON.parse(gradesJson);
          if (!Array.isArray(grades) || grades.length === 0) {
            issues.push(`配置 "${name}" (${id}): grades 为空`);
            continue;
          }
          for (const g of grades) {
            if (!g.code || !g.name || g.minScore == null || g.maxScore == null) {
              issues.push(`配置 "${name}" (${id}): grade 缺少 code/name/minScore/maxScore`);
            }
          }
        } catch {
          issues.push(`配置 "${name}" (${id}): grades JSON 解析失败`);
        }
      }
      if (issues.length > 0) return { status: 'fail', detail: issues.join('\n  ') };
      return { status: 'pass', detail: `${rows.length} 个配置全部结构正确` };
    },
  },
  {
    name: '360 模板 created_by 引用有效用户',
    fn: (_query, queryRows) => {
      const orphans = queryRows(
        `SELECT t.id, t.name, t.created_by FROM platform_performance.evaluation_360_template t
         LEFT JOIN platform_iam.users u ON t.created_by = u.id
         WHERE t.deleted_at IS NULL AND u.id IS NULL`
      );
      if (orphans.length > 0) {
        return { status: 'fail', detail: `${orphans.length} 个模板的 created_by 引用不存在的用户` };
      }
      return { status: 'pass', detail: 'FK 引用全部有效' };
    },
  },
  {
    name: '周期状态枚举合法',
    fn: (_query, queryRows) => {
      const validStatuses = ['DRAFT', 'GOAL_SETTING', 'IN_PROGRESS', 'EVALUATING', 'CALIBRATING', 'CONFIRMING', 'COMPLETED', 'ARCHIVED'];
      const rows = queryRows(
        "SELECT DISTINCT status FROM platform_performance.performance_cycle WHERE deleted_at IS NULL"
      );
      const invalid = rows.filter(s => !validStatuses.includes(s));
      if (invalid.length > 0) {
        return { status: 'fail', detail: `非法状态值: ${invalid.join(', ')}` };
      }
      return { status: 'pass', detail: `${rows.length} 种状态值全部合法` };
    },
  },
  {
    name: 'KPI assignment 状态值合法',
    fn: (_query, queryRows) => {
      const validStatuses = ['DRAFT', 'SUBMITTED', 'APPROVED', 'REJECTED', 'PENDING_DEPENDENCY', 'CONFIRMED'];
      const rows = queryRows(
        "SELECT DISTINCT assignment_status FROM platform_performance.kpi_assignment WHERE deleted_at IS NULL"
      );
      const invalid = rows.filter(s => !validStatuses.includes(s));
      if (invalid.length > 0) {
        return { status: 'fail', detail: `非法状态值: ${invalid.join(', ')}` };
      }
      return { status: 'pass', detail: `${rows.length} 种状态值全部合法` };
    },
  },
  {
    name: '绩效结果 gradeCode 在等级配置中存在',
    fn: (_query, queryRows) => {
      const rows = queryRows(
        `SELECT r.id, r.grade_code FROM platform_performance.performance_result r
         WHERE r.grade_code IS NOT NULL AND r.deleted_at IS NULL`
      );
      if (rows.length === 0) return { status: 'pass', detail: '无绩效结果数据，跳过' };
      const gradeCodes = queryRows(
        `SELECT DISTINCT g->>'code' FROM platform_performance.grade_config, jsonb_array_elements(grades) g WHERE deleted_at IS NULL`
      );
      const validCodes = new Set(gradeCodes);
      const invalid = rows.filter(r => !validCodes.has(r.split('|')[1]));
      if (invalid.length > 0) {
        return { status: 'warn', detail: `${invalid.length} 条结果的 gradeCode 不在当前等级配置中` };
      }
      return { status: 'pass', detail: `${rows.length} 条结果的 gradeCode 全部有效` };
    },
  },
];
