// 熟悉度計算工具 - 與後端算法保持一致

/**
 * 計算當前熟悉度（考慮記憶衰減）
 * @param baseMastery 基礎熟悉度 (0-100)
 * @param lastReviewDate 最後復習日期 (ISO格式)
 * @returns 當前熟悉度 (0-100)
 */
export function calculateCurrentMastery(baseMastery: number, lastReviewDate: string): number {
  const today = new Date();
  const lastDate = new Date(lastReviewDate);
  const daysSince = Math.floor((today.getTime() - lastDate.getTime()) / (1000 * 60 * 60 * 24));

  if (daysSince <= 0) return baseMastery;

  // 應用記憶衰減（與後端一致的算法）
  const decayRate = 0.05; // 每天5%衰減
  const maxDecayDays = 30;
  const effectiveDays = Math.min(daysSince, maxDecayDays);
  const decayFactor = Math.pow(1 - decayRate, effectiveDays);

  return Math.max(0, Math.floor(baseMastery * decayFactor));
}

/**
 * 計算衰減程度
 * @param baseMastery 基礎熟悉度
 * @param currentMastery 當前熟悉度
 * @returns 衰減量
 */
export function getDecayAmount(baseMastery: number, currentMastery: number): number {
  return Math.max(0, baseMastery - currentMastery);
}

/**
 * 根據學習者程度和詞彙難度決定可用的複習方式
 * @param userLevel 學習者程度 (1-100)
 * @param wordLevel 詞彙難度 (1-100)
 * @returns 適合的複習題型列表
 */
export function getReviewTypesByDifficulty(userLevel: number, wordLevel: number): string[] {
  const difficulty = wordLevel - userLevel;

  if (userLevel <= 20) {
    // A1學習者 - 統一基礎題型
    return ['flip-memory', 'vocab-choice', 'vocab-listening'];
  } else if (difficulty < -10) {
    // 簡單詞彙 (學習者程度 > 詞彙程度)
    return ['sentence-reorder', 'sentence-fill'];
  } else if (difficulty >= -10 && difficulty <= 10) {
    // 適中詞彙 (學習者程度 ≈ 詞彙程度)
    return ['sentence-fill', 'sentence-reorder', 'sentence-speaking'];
  } else {
    // 困難詞彙 (學習者程度 < 詞彙程度)
    return ['flip-memory', 'vocab-choice'];
  }
}

/**
 * 檢查是否為A1學習者
 * @param userLevel 學習者程度
 * @returns 是否為A1學習者
 */
export function isA1Learner(userLevel: number): boolean {
  return userLevel <= 20;
}

/**
 * 獲取熟悉度等級標籤
 * @param masteryLevel 熟悉度 (0-100)
 * @returns 等級標籤和顏色
 */
export function getMasteryLevelInfo(masteryLevel: number): { label: string; color: string; bgColor: string } {
  if (masteryLevel >= 80) {
    return { label: '熟練', color: 'text-green-700', bgColor: 'bg-green-100' };
  } else if (masteryLevel >= 60) {
    return { label: '良好', color: 'text-blue-700', bgColor: 'bg-blue-100' };
  } else if (masteryLevel >= 40) {
    return { label: '一般', color: 'text-yellow-700', bgColor: 'bg-yellow-100' };
  } else {
    return { label: '需加強', color: 'text-red-700', bgColor: 'bg-red-100' };
  }
}

/**
 * 計算複習進度百分比
 * @param completed 已完成數量
 * @param total 總數量
 * @returns 進度百分比 (0-100)
 */
export function calculateProgress(completed: number, total: number): number {
  if (total === 0) return 0;
  return Math.round((completed / total) * 100);
}