/**
 * Adaptive Practice 模块类型定义
 *
 * 专项练习闭环：错题变式 → 知识点专项 → 薄弱章节 → AI 推荐
 */

// ---------------------------------------------------------------------------
// 枚举类型（与 schema 保持一致）
// ---------------------------------------------------------------------------

export type PracticeType = "error_variant" | "knowledge_point" | "weak_chapter" | "ai_recommended"
export type PracticeStatus = "in_progress" | "completed" | "abandoned"
export type PracticeAnswerStatus = "pending" | "answered" | "skipped"

// ---------------------------------------------------------------------------
// 来源元数据
// ---------------------------------------------------------------------------

/** 错题变式练习来源 */
export interface ErrorVariantSourceMeta {
  /** 触发练习的错题 ID 列表 */
  errorBookItemIds: string[]
  /** 关联的原题 ID 列表 */
  sourceQuestionIds: string[]
}

/** 知识点专项练习来源 */
export interface KnowledgePointSourceMeta {
  knowledgePointIds: string[]
  /** 难度筛选（1-5，不传则不限） */
  difficulty?: number
}

/** 薄弱章节练习来源 */
export interface WeakChapterSourceMeta {
  /** 章节 ID（可选；未传时跨所有章节自动识别薄弱知识点） */
  chapterId?: string
  /** 自动识别的薄弱知识点（可选；未传时由 data-access 自动识别） */
  weakKnowledgePointIds?: string[]
}

/** AI 推荐练习来源 */
export interface AiRecommendedSourceMeta {
  /** AI 推荐的知识点列表 */
  recommendedKnowledgePointIds: string[]
  /** 推荐理由（枚举值，UI 层翻译） */
  reason: AiRecommendedReason
}

/**
 * AI 推荐理由枚举。
 *
 * 业务数据，存数据库，UI 层通过 t(`reasons.${reason}`) 查 i18n。
 * 严禁存翻译文本到数据库。
 */
export type AiRecommendedReason = "student_initiated" | "teacher_assigned" | "parent_suggested"

export type PracticeSourceMeta =
  | ErrorVariantSourceMeta
  | KnowledgePointSourceMeta
  | WeakChapterSourceMeta
  | AiRecommendedSourceMeta

// ---------------------------------------------------------------------------
// 数据传输类型
// ---------------------------------------------------------------------------

/** 练习会话（列表视图） */
export interface PracticeSessionSummary {
  id: string
  studentId: string
  subjectId: string | null
  practiceType: PracticeType
  status: PracticeStatus
  totalQuestions: number
  answeredQuestions: number
  correctCount: number
  /** 正确率 0-1 */
  accuracy: number
  startedAt: Date
  completedAt: Date | null
  createdAt: Date
}

/** 练习答题记录 */
export interface PracticeAnswerRecord {
  id: string
  sessionId: string
  questionId: string
  variantContent: unknown | null
  isVariant: boolean
  orderIndex: number
  status: PracticeAnswerStatus
  studentAnswer: unknown | null
  isCorrect: boolean | null
  score: number | null
  maxScore: number
  answeredAt: Date | null
  /** 关联题目内容（联表查询） */
  question: {
    id: string
    content: unknown
    type: string
    difficulty: number | null
  } | null
}

/** 练习会话详情（含答题记录） */
export interface PracticeSessionDetail extends PracticeSessionSummary {
  sourceMeta: PracticeSourceMeta | null
  answers: PracticeAnswerRecord[]
}

/** 练习统计 */
export interface PracticeStats {
  totalSessions: number
  completedSessions: number
  totalQuestionsAnswered: number
  totalCorrect: number
  /** 总体正确率 0-1 */
  overallAccuracy: number
  /** 按练习类型分组统计 */
  byType: Array<{
    practiceType: PracticeType
    sessionCount: number
    totalQuestions: number
    correctCount: number
    accuracy: number
  }>
}

// ---------------------------------------------------------------------------
// 出题策略输入
// ---------------------------------------------------------------------------

/** 创建练习会话的输入 */
export interface CreatePracticeSessionInput {
  practiceType: PracticeType
  subjectId?: string
  /** 来源元数据（类型不同则结构不同） */
  sourceMeta: PracticeSourceMeta
  /** 题目数量（默认 10） */
  questionCount?: number
}

/** 出题策略结果 */
export interface QuestionSelectionResult {
  /** 选中的题目 ID 列表 */
  questionIds: string[]
  /** 变式题映射：原题 ID → 变式题内容（AI 生成时使用） */
  variants: Map<string, unknown>
}
