export interface AdminUser {
  id: string;
  name: string;
  email: string;
  role: 'student' | 'teacher' | 'admin';
  isActive: boolean;
  createdAt: string;
  lastLoginAt?: string;
}

export interface TeacherResponse {
  id: string;
  username: string;
  email: string;
  fullName: string;
  role: string;
  createdAt: string;
  updatedAt: string;
  teacherId?: string;
}

export interface StudentResponse {
  id: string;
  username: string;
  email: string;
  fullName: string;
  role: string;
  createdAt: string;
  updatedAt: string;
  studentId?: string;
  nis?: string;
  className?: string;
  joinDate?: string;
}

export interface StudentProgressItem {
  id: string;
  status: string;
  bestScore: number;
  completedAt: string;
  verseId: string;
  verseNumber: number;
  chapterId: string;
  chapterTitle: string;
  chapterSequence: number;
}

export interface StudentDetailResponse extends StudentResponse {
  progress?: StudentProgressItem[];
}

export interface CreateUserRequest {
  name: string;
  email: string;
  password: string;
  role: 'student' | 'teacher' | 'admin';
}

export interface UpdateUserRequest {
  name?: string;
  email?: string;
  role?: 'student' | 'teacher' | 'admin';
  isActive?: boolean;
}

export interface AdminMasterAudio {
  id: string;
  verseId: string;
  verseNumber: number;
  audioUrl: string;
  duration: number;
  uploadedBy: string;
  createdAt: string;
}

export interface AppSettings {
  appName: string;
  dailyTarget: number;
  maxRecordingDuration: number;
  autoApproveThreshold: number;
  enableMurojaah: boolean;
  enableLeaderboard: boolean;
  maintenanceMode: boolean;
}

export interface ClassResponse {
  id: string;
  name: string;
  teacherId: string;
  createdAt: string;
  updatedAt: string;
  teacher?: {
    id: string;
    user?: {
      fullName: string;
    };
  };
  _count?: {
    students: number;
  };
}

export interface ClassStudent {
  id: string;
  userId: string;
  nis?: string;
  user: {
    id: string;
    fullName: string;
    email: string;
    username: string;
  };
}

export interface ClassStudentMember {
  id: string;
  userId: string;
  nis: string;
  className: string;
  joinDate: string;
  fullName: string;
  username: string;
  email: string;
}

export interface ClassStudentsPaginatedMeta {
  total: number;
  page: number;
  lastPage: number;
}

export interface ClassStudentsPaginatedResponse {
  isSuccess: boolean;
  message: string;
  meta: ClassStudentsPaginatedMeta;
  data: ClassStudentMember[];
}

export interface ClassTeacher {
  id: string;
  userId: string;
  user: {
    id: string;
    fullName: string;
    email: string;
    username: string;
  };
}

export interface ClassDetailResponse {
  id: string;
  name: string;
  teacherId?: string;
  createdAt: string;
  updatedAt: string;
  teacher?: {
    id: string;
    user?: {
      fullName: string;
      email: string;
    };
  };
  students: ClassStudent[];
  teachers: ClassTeacher[];
  _count?: {
    students: number;
  };
}

export interface TeacherMyStudent {
  id: string;
  username: string;
  email: string;
  fullName: string;
  role: string;
  createdAt: string;
  updatedAt: string;
  studentId: string;
  nis: string;
  className: string;
  classroomId: string;
  classroom: {
    id: string;
    name: string;
  };
  joinDate: string;
}

export interface TeacherMyStudentsResponse {
  isSuccess: boolean;
  message: string;
  meta: {
    total: number;
    page: number;
    lastPage: number;
  };
  data: TeacherMyStudent[];
}

export interface TeacherStudentDetailProgressItem extends StudentProgressItem {
  latestAiScore: number;
}

export interface TeacherStudentDetail {
  id: string;
  username: string;
  email: string;
  fullName: string;
  role: string;
  createdAt: string;
  updatedAt: string;
  studentId: string;
  nis: string;
  className: string;
  classroomId: string;
  classroom: {
    id: string;
    name: string;
  };
  joinDate: string;
  assignedTeacher: {
    teacherId: string;
    userId: string;
    fullName: string;
  };
  progress: TeacherStudentDetailProgressItem[];
}

export interface TeacherStudentDetailResponse {
  isSuccess: boolean;
  message: string;
  meta: any;
  data: TeacherStudentDetail;
}
