import { Verse } from './verse';

export interface Submission {
  id: string;
  studentId: string;
  studentName?: string;
  studentAvatar?: string;
  verseId: string;
  verseNumber?: number;
  verse?: Verse;
  chapterName?: string;
  audioUrl: string;
  durationSeconds?: number;
  status: SubmissionStatus;
  scores?: SubmissionScores;
  aiScore?: number | SubmissionAiScore | null;
  aiTranscription?: string;
  teacherReview?: SubmissionTeacherReview | null;
  teacherNotes?: string;
  teacherId?: string;
  teacherName?: string;
  submittedAt?: string;
  createdAt: string;
  updatedAt?: string;
  reviewedAt?: string;
}

export interface SubmissionTeacherReview {
  score?: number;
  textSimilarity?: number | null;
  audioSimilarity?: number | null;
  notes?: string | null;
  status?: string;
  reviewedAt?: string;
}

export interface SubmissionAiScore {
  id: string;
  transcription?: string;
  metrics?: Record<string, unknown> | null;
  finalScore?: number;
  feedback?: string;
}

export type SubmissionStatus = 'pending' | 'approved' | 'need_revision' | 'rejected';

export interface SubmissionScores {
  overall: number;
  similarity: number;
  fluency: number;
  pronunciation: number;
}

export interface CreateSubmissionRequest {
  verseId: string;
  audio: File | Blob;
  durationSeconds: number;
}

export interface ReviewSubmissionRequest {
  submissionId: string;
  status: 'APPROVED' | 'NEED_REVISION' | 'REJECTED' | 'approved' | 'need_revision';
  textSimilarity: number;
  audioSimilarity: number;
  notes?: string;
}

export interface SubmissionResult {
  submission: Submission;
  scores: SubmissionScores;
  feedback: string;
  previousBest?: number;
  isNewRecord: boolean;
}

export interface TeacherReviewItem {
  id: string;
  studentId: string;
  verseId: string;
  audioUrl: string;
  durationSeconds: number;
  status: string;
  submittedAt: string;
  verse: {
    id: string;
    chapterId: string;
    number: number;
    arabicText: string;
    latinText: string;
    latinPesantren: string;
    translation: string;
  };
  aiScore?: {
    id: string;
    transcription: string;
    metrics: any;
    finalScore: number;
    feedback: string;
  } | null;
  teacherReview?: {
    id: string;
    teacherId: string;
    score: number;
    notes: string;
    status: string;
    reviewedAt: string;
  } | null;
  student: {
    id: string;
    nis: string;
    className: string;
    user: {
      fullName: string;
    };
  };
}

export interface TeacherReviewResponse {
  isSuccess: boolean;
  message: string;
  meta: any;
  data: TeacherReviewItem[];
}
