from flask import render_template, g
from flask_login import current_user
from app.murid import murid_bp
from app.auth.decorators import role_required, tenant_query
from app.models import KelasMurid, Nilai, Kehadiran, Jadwal


@murid_bp.route('/')
@role_required('murid')
def dashboard():
    enrollments = KelasMurid.query.filter_by(school_id=g.school_id, murid_id=current_user.id).all()
    kelas_names = [e.kelas.name for e in enrollments]
    kelas_ids = [e.kelas_id for e in enrollments]

    total_nilai = Nilai.query.filter_by(school_id=g.school_id, murid_id=current_user.id).count()
    total_hadir = Kehadiran.query.filter_by(school_id=g.school_id, murid_id=current_user.id, status='hadir').count()
    total_kehadiran = Kehadiran.query.filter_by(school_id=g.school_id, murid_id=current_user.id).count()

    jadwal_list = Jadwal.query.filter(
        Jadwal.school_id == g.school_id,
        Jadwal.kelas_id.in_(kelas_ids)
    ).order_by(Jadwal.day, Jadwal.start_time).all() if kelas_ids else []

    return render_template('murid/dashboard.html',
                           kelas_names=kelas_names,
                           total_nilai=total_nilai,
                           total_hadir=total_hadir,
                           total_kehadiran=total_kehadiran,
                           jadwal_list=jadwal_list)


@murid_bp.route('/nilai')
@role_required('murid')
def nilai():
    nilai_list = Nilai.query.filter_by(
        school_id=g.school_id,
        murid_id=current_user.id
    ).order_by(Nilai.created_at.desc()).all()

    grouped = {}
    for n in nilai_list:
        mapel_name = n.mata_pelajaran.name
        if mapel_name not in grouped:
            grouped[mapel_name] = []
        grouped[mapel_name].append(n)

    return render_template('murid/nilai.html', grouped_nilai=grouped, total=len(nilai_list))


@murid_bp.route('/kehadiran')
@role_required('murid')
def kehadiran():
    kehadiran_list = Kehadiran.query.filter_by(
        school_id=g.school_id,
        murid_id=current_user.id
    ).order_by(Kehadiran.date.desc()).all()

    stats = {'hadir': 0, 'izin': 0, 'sakit': 0, 'alpha': 0}
    for k in kehadiran_list:
        stats[k.status] += 1

    return render_template('murid/kehadiran.html', kehadiran_list=kehadiran_list, stats=stats)
