/**
 * 灵感评估(assessment 三件套)共用纯函数 + 类型。
 *
 * 抽自 ProjectDetail.vue / IdeaDetail.vue 两处完全相同的定义
 * (ScoreDimension interface + parseScores + assessmentClass + assessmentLabel),
 * 消除 DRY 重复。本模块无响应式依赖,可被任意 <script setup> import 复用。
 */
import type { ComposerTranslation } from 'vue-i18n'

/** 传统评分维度:name + 分数 */
export interface ScoreDimension {
  name: string
  score: number
}

/** 评分三分档类型 */
export type ScoreTier = 'high' | 'mid' | 'low'

/**
 * 评分三分档阈值统一(>=80 high / >=60 mid / else low)。
 * 原 Ideas.vue scoreClass / IdeasPanel.vue tier / IdeaDetail.vue 模板内联 /
 * ProjectDetail.vue 模板内联 4 处重复同一阈值逻辑,提取单一来源。
 * 阈值调整只需改这一处。
 */
export function scoreTier(score: number | null | undefined): ScoreTier {
  const s = score ?? 0
  if (s >= 80) return 'high'
  if (s >= 60) return 'mid'
  return 'low'
}

/**
 * 解析 idea.scores(JSON 对象 {dim: score})为维度数组。
 * null / 空 / 非法 / 非对象 → []。非数值分维度记 0。
 * @param scoresJson idea.scores 原始字符串(可能为 null)
 */
export function parseScores(scoresJson: string | null | undefined): ScoreDimension[] {
  if (!scoresJson) return []
  try {
    const parsed = JSON.parse(scoresJson)
    if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
      return Object.entries(parsed).map(([name, score]) => ({
        name,
        score: typeof score === 'number' ? score : 0,
      }))
    }
    return []
  } catch {
    return []
  }
}

/** recommendation → CSS badge 颜色类映射(对应 .immediate/.soon/.conditional/.revised/.defer/.cancel) */
const ASSESSMENT_CLASS_MAP: Record<string, string> = {
  'immediate action': 'immediate',
  'soon': 'soon',
  'with resources': 'conditional',
  'research more': 'revised',
  'monitor': 'defer',
  'cancel': 'cancel',
}

/**
 * recommendation 字符串 → CSS badge 类。
 * 未知值回退到 'conditional'(中性,对齐原两处实现)。
 */
export function assessmentClass(recommendation: string): string {
  return ASSESSMENT_CLASS_MAP[recommendation.toLowerCase()] ?? 'conditional'
}

/**
 * recommendation 字符串 → i18n 本地化标签。
 * 命中 ideas.assessment.{recommendation} 则返回译文,否则回退到原始 recommendation。
 * @param t vue-i18n 的 t 函数(useI18n().t),由调用方注入避免本模块耦合 i18n 实例
 */
export function assessmentLabel(
  t: ComposerTranslation,
  recommendation: string,
): string {
  const key = `ideas.assessment.${recommendation}`
  const translated = t(key)
  return translated === key ? recommendation : translated
}
