import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'

const root = resolve(new URL('..', import.meta.url).pathname)
const myResult = readFileSync(resolve(root, 'src/views/scoring/MyResultView.vue'), 'utf8')
const scoringEdit = readFileSync(resolve(root, 'src/views/scoring/ScoringEditView.vue'), 'utf8')

const failures = []

function reject(pattern, message) {
  if (pattern.test(myResult) || pattern.test(scoringEdit)) failures.push(message)
}

function requireIn(file, pattern, message) {
  if (!pattern.test(file)) failures.push(message)
}

// OKR 满分 60 — 不得改为 40
reject(/满分\s*40[\s\S]{0,80}OKR|OKR[\s\S]{0,80}满分\s*40/, 'OKR 自评/终评必须是 60 分制，不能显示满分 40')
// 绩效维度满分 40 — 不得改为 60
reject(/满分\s*60[\s\S]{0,80}绩效|绩效[\s\S]{0,80}满分\s*60/, '绩效维度必须是 40 分制，不能显示满分 60')
// 不允许二次加权系数
reject(/×\s*0\.[46](?!\d)/, '结果展示不能使用二次加权系数 ×0.6 或 ×0.4（排除动画时长 0.4s 等合法值）')
reject(/OKR\(40%\)|绩效\(60%\)|工作成果\(60%\)/, '评分预览应写分值制，不应写成百分比加权')

// OKR 得分 = 平均 × 60 = ... / 60
requireIn(myResult, /OKR 得分 = 平均[\s\S]*× 60[\s\S]*\/ 60/, 'MyResultView 自评 OKR 小计应展示 ×60 与 /60')
requireIn(myResult, /绩效[\s\S]*\/ 40/, 'MyResultView 自评绩效维度小计应展示 /40')
requireIn(scoringEdit, /OKR 得分 = 平均[\s\S]*× 60[\s\S]*\/ 60/, 'ScoringEditView 终评 OKR 小计应展示 ×60 与 /60')
requireIn(scoringEdit, /绩效[\s\S]*\/ 40/, 'ScoringEditView 终评绩效维度小计应展示 /40')

if (failures.length) {
  console.error('评分契约检查失败：')
  failures.forEach(item => console.error(`- ${item}`))
  process.exit(1)
}

console.log('评分契约检查通过')
