import type { LessonPlanNode } from "../types";

/**
 * 节点摘要翻译函数接口。
 * 调用方传入 next-intl 的 t 函数，避免纯函数直接耦合 i18n 实现。
 * values 类型对齐 next-intl 的 TranslationValues（string | number | Date）。
 */
export interface NodeSummaryT {
  (key: "editor.questionCount" | "editor.charCount" | "editor.nodeSummaryEmpty", values?: Record<string, string | number | Date>): string;
}

/**
 * 纯函数：获取节点摘要文本（用于节点卡片显示）。
 * 从 lesson-node.tsx 抽取，便于单元测试。
 * 翻译文本由调用方通过 t 函数注入，保证纯函数可测性。
 */
export function getNodeSummary(node: LessonPlanNode, t: NodeSummaryT): string {
  const data = node.data as {
    html?: string;
    sourceText?: string;
    items?: unknown[];
    knowledgePointIds?: string[];
  };
  if (data.items !== undefined) {
    return t("editor.questionCount", { count: data.items.length });
  }
  if (data.sourceText !== undefined && data.sourceText) {
    return t("editor.charCount", { count: data.sourceText.length });
  }
  if (data.html) {
    // 去标签后取前 40 字
    const text = data.html.replace(/<[^>]+>/g, "").trim();
    return text.slice(0, 40) || t("editor.nodeSummaryEmpty");
  }
  return t("editor.nodeSummaryEmpty");
}

/**
 * 节点类型 → 图标颜色（Material Design 色板）。
 * 供 lesson-node 和 minimap 复用。
 */
export const NODE_COLORS: Record<string, string> = {
  objective: "#4caf50",
  key_point: "#f44336",
  import: "#2196f3",
  new_teaching: "#9c27b0",
  consolidation: "#ff9800",
  summary: "#607d8b",
  homework: "#795548",
  blackboard: "#009688",
  text_study: "#3f51b5",
  exercise: "#e91e63",
  rich_text: "#9e9e9e",
  reflection: "#cddc39",
};

export function getNodeColor(type: string): string {
  return NODE_COLORS[type] ?? "#9e9e9e";
}
