export type ControlPointStyleId = 'classic-ring' | 'solid-dot' | 'double-ring' | 'badge' | 'pulse-core'

export type CourseLegStyleId = 'classic-leg' | 'dashed-leg' | 'glow-leg' | 'progress-leg'

export interface ControlPointStyleEntry {
  style: ControlPointStyleId
  colorHex: string
  sizeScale?: number
  accentRingScale?: number
  glowStrength?: number
  labelScale?: number
  labelColorHex?: string
}

export interface CourseLegStyleEntry {
  style: CourseLegStyleId
  colorHex: string
  widthScale?: number
  glowStrength?: number
}

export interface ScoreBandStyleEntry extends ControlPointStyleEntry {
  min: number
  max: number
}

export interface SequentialCourseStyleConfig {
  controls: {
    default: ControlPointStyleEntry
    current: ControlPointStyleEntry
    completed: ControlPointStyleEntry
    skipped: ControlPointStyleEntry
    start: ControlPointStyleEntry
    finish: ControlPointStyleEntry
  }
  legs: {
    default: CourseLegStyleEntry
    completed: CourseLegStyleEntry
  }
}

export interface ScoreOCourseStyleConfig {
  controls: {
    default: ControlPointStyleEntry
    focused: ControlPointStyleEntry
    collected: ControlPointStyleEntry
    start: ControlPointStyleEntry
    finish: ControlPointStyleEntry
    scoreBands: ScoreBandStyleEntry[]
  }
}

export interface CourseStyleConfig {
  sequential: SequentialCourseStyleConfig
  scoreO: ScoreOCourseStyleConfig
}

export const DEFAULT_COURSE_STYLE_CONFIG: CourseStyleConfig = {
  sequential: {
    controls: {
      default: { style: 'classic-ring', colorHex: '#cc006b', sizeScale: 1, labelScale: 1 },
      current: { style: 'pulse-core', colorHex: '#38fff2', sizeScale: 1.08, accentRingScale: 1.28, glowStrength: 0.9, labelScale: 1.08, labelColorHex: '#fff4fb' },
      completed: { style: 'solid-dot', colorHex: '#7e838a', sizeScale: 0.88, labelScale: 0.96 },
      skipped: { style: 'badge', colorHex: '#8a9198', sizeScale: 0.9, accentRingScale: 1.12, labelScale: 0.94 },
      start: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.04, accentRingScale: 1.3, labelScale: 1.02 },
      finish: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.08, accentRingScale: 1.34, glowStrength: 0.32, labelScale: 1.06, labelColorHex: '#fff4de' },
    },
    legs: {
      default: { style: 'classic-leg', colorHex: '#cc006b', widthScale: 1 },
      completed: { style: 'progress-leg', colorHex: '#7a8088', widthScale: 0.92, glowStrength: 0.24 },
    },
  },
  scoreO: {
    controls: {
      default: { style: 'badge', colorHex: '#cc006b', sizeScale: 0.96, accentRingScale: 1.1, labelScale: 1.02, labelColorHex: '#ffffff' },
      focused: { style: 'badge', colorHex: '#cc006b', sizeScale: 1.1, accentRingScale: 1.34, glowStrength: 0.92, labelScale: 1.08, labelColorHex: '#ffffff' },
      collected: { style: 'badge', colorHex: '#9aa3ad', sizeScale: 0.86, accentRingScale: 1.08, labelScale: 0.94, labelColorHex: '#ffffff' },
      start: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.02, accentRingScale: 1.24, labelScale: 1.02 },
      finish: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.06, accentRingScale: 1.28, glowStrength: 0.26, labelScale: 1.04, labelColorHex: '#fff4de' },
      scoreBands: [
        { min: 0, max: 19, style: 'badge', colorHex: '#56ccf2', sizeScale: 0.96, accentRingScale: 1.1, labelScale: 1.02, labelColorHex: '#ffffff' },
        { min: 20, max: 49, style: 'badge', colorHex: '#f2c94c', sizeScale: 0.96, accentRingScale: 1.1, labelScale: 1.02, labelColorHex: '#ffffff' },
        { min: 50, max: 999999, style: 'badge', colorHex: '#eb5757', sizeScale: 0.96, accentRingScale: 1.1, glowStrength: 0.72, labelScale: 1.02, labelColorHex: '#ffffff' },
      ],
    },
  },
}
