{{-- HIDDEN RECALCULATE FORM --}} @if($selectedClassId && $selectedYearId) @endif {{-- FLASH MESSAGES --}} @if(session('success'))
{{ session('success') }}
@endif {{-- FILTERS & ACTIONS CONTROL PANEL --}}
{{-- Academic Year --}}
{{-- Term --}}
{{-- Class --}}
{{-- Action Buttons --}}
{{ __('Reset Filters') }} @if($selectedClassId && $selectedYearId) @else @endif
@if($snapshots->isNotEmpty()) {{-- SUMMARY STATS --}}

{{ __('Students Enrolled') }}

{{ $snapshots->count() }}

{{ __('Class Average GPA') }}

{{ number_format($snapshots->avg('gpa'), 2) }}

{{ __('Pass Rate') }}

@php $passRate = $snapshots->filter(fn($s) => $s->subjects_failed == 0)->count() / max($snapshots->count(), 1) * 100; @endphp

{{ number_format($passRate, 1) }}%

{{ __('Avg Attendance') }}

{{ number_format($snapshots->avg('overall_attendance_percentage'), 1) }}%

{{-- RANKINGS TABLE --}}

{{ __('Class Rankings') }}

{{ __('Sorted by GPA') }}
@foreach($snapshots as $snapshot) @endforeach
{{ __('Rank') }} {{ __('Student') }} {{ __('GPA') }} {{ __('Grade') }} {{ __('Avg Score') }} {{ __('Subjects') }} {{ __('Attendance') }} {{ __('OPS Tier') }} {{ __('Trend') }}
{{ $snapshot->class_rank ?? '—' }}
{{ strtoupper(substr($snapshot->student->name ?? 'S', 0, 1)) }}

{{ $snapshot->student->name ?? 'Unknown' }}

{{ $snapshot->student->email ?? '' }}

{{ number_format($snapshot->gpa ?? 0, 2) }} /4.0 @php $grade = $snapshot->overall_grade_letter ?? '—'; $gradeColor = match(true) { in_array($grade, ['A+', 'A']) => 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400 border-emerald-200 dark:border-emerald-800/50', in_array($grade, ['B+', 'B']) => 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400 border-blue-200 dark:border-blue-800/50', in_array($grade, ['C+', 'C']) => 'bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400 border-amber-200 dark:border-amber-800/50', in_array($grade, ['D+', 'D']) => 'bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400 border-orange-200 dark:border-orange-800/50', default => 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400 border-red-200 dark:border-red-800/50', }; @endphp {{ $grade }} {{ $snapshot->average_score ? number_format($snapshot->average_score, 1).'%' : '—' }} {{ $snapshot->subjects_passed }} / {{ $snapshot->subjects_total }} @if($snapshot->subjects_failed > 0)
({{ $snapshot->subjects_failed }} failed)
@endif
@php $att = $snapshot->overall_attendance_percentage ?? 0; @endphp
{{ number_format($att, 0) }}%
@php $tier = $snapshot->ops_tier ?? 'Bronze'; $tierColor = match($tier) { 'Diamond' => 'text-cyan-700 bg-cyan-50 border-cyan-200 dark:text-cyan-400 dark:bg-cyan-900/20 dark:border-cyan-800', 'Platinum' => 'text-purple-700 bg-purple-50 border-purple-200 dark:text-purple-400 dark:bg-purple-900/20 dark:border-purple-800', 'Gold' => 'text-amber-700 bg-amber-50 border-amber-200 dark:text-amber-400 dark:bg-amber-900/20 dark:border-amber-800', 'Silver' => 'text-slate-700 bg-slate-50 border-slate-200 dark:text-slate-300 dark:bg-slate-700 dark:border-slate-600', default => 'text-orange-700 bg-orange-50 border-orange-200 dark:text-orange-400 dark:bg-orange-900/20 dark:border-orange-800', }; @endphp {{ $tier }} @php $trend = $snapshot->trend ?? 'new'; $trendIcon = match($trend) { 'improving' => '', 'declining' => '', 'stable' => '', default => '', }; @endphp
{!! $trendIcon !!}
@elseif($selectedClassId || $selectedYearId) @else @endif