// lib/core/models/academic_score_model.dart

class AcademicScore {
  final String subject;
  final List<Assignment> assignments;
  final double? midExamScore;
  final double? finalExamScore;

  AcademicScore({
    required this.subject,
    required this.assignments,
    this.midExamScore,
    this.finalExamScore,
  });

  /// Mengambil nilai rata-rata mata pelajaran.
  /// Perbaikan: Nilai 0 pada tugas atau ujian tetap dihitung sebagai pembagi 
  /// agar mencerminkan performa akademik yang sebenarnya.
double get averageMapel {
  int totalKomponen = 0;
  double totalNilai = 0;

  // 1. Hitung Rata-rata Tugas
  if (assignments.isNotEmpty) {
    // Hanya hitung tugas yang statusnya sudah "Selesai" (ada di koleksi penilaian)
    var gradedAssignments = assignments.where((a) => a.status == "Selesai").toList();
    
    if (gradedAssignments.isNotEmpty) {
      double sumTugas = gradedAssignments.fold(0, (sum, item) => sum + item.score);
      totalNilai += (sumTugas / gradedAssignments.length);
      totalKomponen++;
    }
  }

  // 2. Tambahkan UTS ke rata-rata jika sudah dinilai (tidak null)
  if (midExamScore != null) {
    totalNilai += midExamScore!;
    totalKomponen++;
  }

  // 3. Tambahkan UAS ke rata-rata jika sudah dinilai (tidak null)
  // Nilai 0 tetap dihitung sebagai pembagi jika datanya ada di penilaian
  if (finalExamScore != null) {
    totalNilai += finalExamScore!;
    totalKomponen++;
  }

  return totalKomponen > 0 ? totalNilai / totalKomponen : 0.0;
}
}

class Assignment {
  final String name;
  final double score;
  final String status;

  Assignment({
    required this.name, 
    required this.score, 
    required this.status,
  });
}