/**
 * Global Difficulty Mapping Utility
 * Maps numeric difficulty values (0-100) to number scale (1-5)
 * 1 = Very Easy (0-10)
 * 2 = Easy (11-30)
 * 3 = Medium (31-50)
 * 4 = Hard (51-70)
 * 5 = Very Hard (71-100)
 */

export const DIFFICULTY_RANGES = {
  'Very Easy': { min: 0, max: 10, number: 1 },
  'Easy': { min: 11, max: 30, number: 2 },
  'Medium': { min: 31, max: 50, number: 3 },
  'Hard': { min: 51, max: 70, number: 4 },
  'Very Hard': { min: 71, max: 100, number: 5 },
} as const;

export type DifficultyLabel = keyof typeof DIFFICULTY_RANGES;

/**
 * Convert numeric difficulty (0-100) to number scale (1-5)
 */
export function getDifficultyNumber(difficulty: number | null | undefined): number | string {
  if (difficulty === null || difficulty === undefined) {
    return '-';
  }
  if (difficulty <= 10) return 1;
  if (difficulty <= 30) return 2;
  if (difficulty <= 50) return 3;
  if (difficulty <= 70) return 4;
  return 5;
}

/**
 * Convert numeric difficulty to label (legacy function - still used for filtering)
 */
export function getDifficultyLabel(difficulty: number | null | undefined): DifficultyLabel | string {
  if (difficulty === null || difficulty === undefined) {
    return '-';
  }
  if (difficulty <= 10) return 'Very Easy';
  if (difficulty <= 30) return 'Easy';
  if (difficulty <= 50) return 'Medium';
  if (difficulty <= 70) return 'Hard';
  return 'Very Hard';
}

/**
 * Convert difficulty label to numeric range for filtering
 */
export function getDifficultyRange(label: DifficultyLabel): { min: number; max: number } {
  return { min: DIFFICULTY_RANGES[label].min, max: DIFFICULTY_RANGES[label].max };
}

/**
 * Get all difficulty labels as array
 */
export function getDifficultyLabels(): DifficultyLabel[] {
  return Object.keys(DIFFICULTY_RANGES) as DifficultyLabel[];
}

/**
 * Get difficulty number from label (1-5)
 */
export function getDifficultyNumberFromLabel(label: DifficultyLabel): number {
  return DIFFICULTY_RANGES[label].number;
}

/**
 * Get difficulty label from number (1-5)
 */
export function getDifficultyLabelFromNumber(num: number): DifficultyLabel | null {
  for (const [label, range] of Object.entries(DIFFICULTY_RANGES)) {
    if (range.number === num) {
      return label as DifficultyLabel;
    }
  }
  return null;
}

/**
 * Get all difficulty numbers (1-5) with their labels
 */
export function getDifficultyOptions(): Array<{ value: string; label: string; number: number }> {
  return [
    { value: '1', label: '1 - Very Easy', number: 1 },
    { value: '2', label: '2 - Easy', number: 2 },
    { value: '3', label: '3 - Medium', number: 3 },
    { value: '4', label: '4 - Hard', number: 4 },
    { value: '5', label: '5 - Very Hard', number: 5 },
  ];
}

/**
 * Convert difficulty number (1-5) to 0-100 range value (using middle of range)
 * Used when saving form data where user selected 1-5 dropdown
 */
export function getDifficultyValueFromNumber(num: number): number {
  if (num <= 1) return 5; // Very Easy: middle of 0-10
  if (num === 2) return 20; // Easy: middle of 11-30
  if (num === 3) return 40; // Medium: middle of 31-50
  if (num === 4) return 60; // Hard: middle of 51-70
  return 85; // Very Hard: middle of 71-100
}

