/**
 * Round type-specific settings interfaces
 */

// Filtering round settings (Round 1: High-volume screening)
export interface FilteringRoundSettings {
  // Auto-elimination configuration
  autoEliminationEnabled: boolean
  autoEliminationThreshold: number // Minimum average score (e.g., 4)
  autoEliminationMinReviews: number // Min reviews required before elimination
  targetAdvancing: number // Target number of projects to advance (e.g., 60)

  // Display options
  showAverageScore: boolean
  showRanking: boolean
}

// Evaluation round settings (Round 2: In-depth review)
export interface EvaluationRoundSettings {
  // Requirements
  detailedCriteriaRequired: boolean
  minimumFeedbackLength: number // Minimum characters for feedback
  targetFinalists: number // Target number of finalists (e.g., 6)

  // Display options
  showAverageScore: boolean
  showRanking: boolean
  requireAllCriteria: boolean
}

// Live event round settings (Round 3: Event day)
export interface LiveEventRoundSettings {
  // Presentation
  presentationDurationMinutes: number
  presentationOrder: string[] // Project IDs in order

  // Voting
  votingWindowSeconds: number
  showLiveScores: boolean
  allowVoteChange: boolean

  // Display
  displayMode: 'SCORES' | 'RANKING' | 'NONE'
}

// Union type for all round settings
export type RoundSettings =
  | { type: 'FILTERING'; settings: FilteringRoundSettings }
  | { type: 'EVALUATION'; settings: EvaluationRoundSettings }
  | { type: 'LIVE_EVENT'; settings: LiveEventRoundSettings }

// Default settings for each round type
export const defaultFilteringSettings: FilteringRoundSettings = {
  autoEliminationEnabled: false,
  autoEliminationThreshold: 4,
  autoEliminationMinReviews: 3,
  targetAdvancing: 60,
  showAverageScore: true,
  showRanking: true,
}

export const defaultEvaluationSettings: EvaluationRoundSettings = {
  detailedCriteriaRequired: true,
  minimumFeedbackLength: 50,
  targetFinalists: 6,
  showAverageScore: true,
  showRanking: true,
  requireAllCriteria: true,
}

export const defaultLiveEventSettings: LiveEventRoundSettings = {
  presentationDurationMinutes: 5,
  presentationOrder: [],
  votingWindowSeconds: 30,
  showLiveScores: true,
  allowVoteChange: false,
  displayMode: 'RANKING',
}

// Round type labels
export const roundTypeLabels: Record<string, string> = {
  FILTERING: 'Filtering Round',
  EVALUATION: 'Evaluation Round',
  LIVE_EVENT: 'Live Event',
}

// Round type descriptions
export const roundTypeDescriptions: Record<string, string> = {
  FILTERING: 'High-volume initial screening with auto-elimination options',
  EVALUATION: 'In-depth evaluation with detailed criteria and feedback',
  LIVE_EVENT: 'Real-time voting during presentations',
}
