// TypeScript Interfaces für Klausur-Korrektur

export interface Klausur {
  id: string
  title: string
  subject: string
  year: number
  semester: string
  modus: 'abitur' | 'vorabitur'
  eh_id?: string
  created_at: string
  student_count?: number
  completed_count?: number
  status?: 'draft' | 'in_progress' | 'completed'
}

export interface StudentWork {
  id: string
  klausur_id: string
  anonym_id: string
  file_path: string
  file_type: 'pdf' | 'image'
  ocr_text: string
  criteria_scores: CriteriaScores
  gutachten: string
  status: StudentStatus
  raw_points: number
  grade_points: number
  grade_label?: string
  created_at: string
  examiner_id?: string
  second_examiner_id?: string
  second_examiner_grade?: number
}

export type StudentStatus =
  | 'UPLOADED'
  | 'OCR_PROCESSING'
  | 'OCR_COMPLETE'
  | 'ANALYZING'
  | 'FIRST_EXAMINER'
  | 'SECOND_EXAMINER'
  | 'COMPLETED'
  | 'ERROR'

export interface CriteriaScores {
  rechtschreibung?: number
  grammatik?: number
  inhalt?: number
  struktur?: number
  stil?: number
  [key: string]: number | undefined
}

export interface Criterion {
  id: string
  name: string
  weight: number
  description?: string
}

export interface GradeInfo {
  thresholds: Record<number, number>
  labels: Record<number, string>
  criteria: Record<string, Criterion>
}

export interface Annotation {
  id: string
  student_work_id: string
  page: number
  position: AnnotationPosition
  type: AnnotationType
  text: string
  severity: 'minor' | 'major' | 'critical'
  suggestion?: string
  created_by: string
  created_at: string
  role: 'first_examiner' | 'second_examiner'
  linked_criterion?: string
}

export interface AnnotationPosition {
  x: number      // Prozent (0-100)
  y: number      // Prozent (0-100)
  width: number  // Prozent (0-100)
  height: number // Prozent (0-100)
}

export type AnnotationType =
  | 'rechtschreibung'
  | 'grammatik'
  | 'inhalt'
  | 'struktur'
  | 'stil'
  | 'comment'
  | 'highlight'

export interface FairnessAnalysis {
  klausur_id: string
  student_count: number
  average_grade: number
  std_deviation: number
  spread: number
  outliers: OutlierInfo[]
  criteria_analysis: Record<string, CriteriaStats>
  fairness_score: number
  warnings: string[]
}

export interface OutlierInfo {
  student_id: string
  anonym_id: string
  grade_points: number
  deviation: number
  reason: string
}

export interface CriteriaStats {
  min: number
  max: number
  average: number
  std_deviation: number
}

export interface EHSuggestion {
  criterion: string
  excerpt: string
  relevance_score: number
  source_chunk_id: string
}

export interface GutachtenSection {
  title: string
  content: string
  evidence_links?: string[]
}

export interface Gutachten {
  einleitung: string
  hauptteil: string
  fazit: string
  staerken: string[]
  schwaechen: string[]
  generated_at?: string
}

// API Response Types
export interface KlausurenResponse {
  klausuren: Klausur[]
  total: number
}

export interface StudentsResponse {
  students: StudentWork[]
  total: number
}

export interface AnnotationsResponse {
  annotations: Annotation[]
}

// Color mapping for annotation types
export const ANNOTATION_COLORS: Record<AnnotationType, string> = {
  rechtschreibung: '#dc2626', // Red
  grammatik: '#2563eb',       // Blue
  inhalt: '#16a34a',          // Green
  struktur: '#9333ea',        // Purple
  stil: '#ea580c',            // Orange
  comment: '#6b7280',         // Gray
  highlight: '#eab308',       // Yellow
}

// Status colors
export const STATUS_COLORS: Record<StudentStatus, string> = {
  UPLOADED: '#6b7280',
  OCR_PROCESSING: '#eab308',
  OCR_COMPLETE: '#3b82f6',
  ANALYZING: '#8b5cf6',
  FIRST_EXAMINER: '#f97316',
  SECOND_EXAMINER: '#06b6d4',
  COMPLETED: '#22c55e',
  ERROR: '#ef4444',
}

export const STATUS_LABELS: Record<StudentStatus, string> = {
  UPLOADED: 'Hochgeladen',
  OCR_PROCESSING: 'OCR laeuft',
  OCR_COMPLETE: 'OCR fertig',
  ANALYZING: 'Analyse laeuft',
  FIRST_EXAMINER: 'Erstkorrektur',
  SECOND_EXAMINER: 'Zweitkorrektur',
  COMPLETED: 'Abgeschlossen',
  ERROR: 'Fehler',
}
