<?php

namespace App\Http\Controllers;

use App\Models\Kelas;
use App\Models\Siswa;
use App\Models\TahunAjaran;
use Illuminate\Http\Request;

class WaliKelasController extends Controller
{
    public function statusPembayaran()
    {
        $user = auth()->user();
        
        if (!$user->hasRole('wali_kelas')) {
            abort(403, 'Unauthorized action.');
        }

        $kelasId = $user->kelas_id;
        $tahunAktif = TahunAjaran::aktif()->first();

        $kelas = Kelas::find($kelasId);
        if (!$kelas) {
            return redirect()->route('dashboard')->with('error', 'Anda belum ditugaskan ke kelas manapun.');
        }

        // Ambil siswa di kelas aktif
        $siswaIds = Siswa::where('siswa.status', 'aktif')
            ->whereHas('siswaKelas', function ($q) use ($kelasId, $tahunAktif) {
                $q->where('kelas_id', $kelasId);
                if ($tahunAktif) {
                    $q->where('tahun_ajaran_id', $tahunAktif->id);
                }
            })
            ->pluck('id')
            ->toArray();

        $jenjang = $kelas->jenjang;

        // Tentukan "Bulan Berjalan" berdasarkan tagihan terakhir yang di-generate untuk tahun ajaran aktif
        $latestTagihan = \App\Models\Tagihan::where('tahun_ajaran_id', $tahunAktif ? $tahunAktif->id : null)
            ->whereNotNull('bulan')
            ->orderBy('tahun', 'desc')
            ->orderBy('bulan', 'desc')
            ->first();

        if ($latestTagihan) {
            $currentMonth = $latestTagihan->bulan;
            $currentYear = $latestTagihan->tahun;
        } else {
            $now = \Carbon\Carbon::now();
            $currentMonth = $now->month;
            $currentYear = $now->year;
        }

        // Data Siswa beserta tagihannya untuk tabel
        $siswaList = Siswa::whereIn('id', $siswaIds)->where('siswa.status', 'aktif')->get()->map(function ($s) use ($currentMonth, $currentYear) {
            $tagihanBulanIni = $s->tagihan()
                ->where('bulan', $currentMonth)
                ->where('tahun', $currentYear)
                ->first();

            $statusBulanIni = $tagihanBulanIni ? $tagihanBulanIni->status : 'tidak_ada_tagihan';
            // Hitung total semua tunggakan dari bulan dan tahun yang telah dilewati
            $nominalTunggakanBulanIni = $s->tagihan()->tunggakan()->sum('sisa_tagihan');

            return (object) [
                'nis' => $s->nis,
                'nama' => $s->nama_lengkap,
                'status_bulan_ini' => $statusBulanIni,
                'nominal_tunggakan_bulan_ini' => $nominalTunggakanBulanIni,
            ];
        });

        return view('wali_kelas.status_pembayaran', compact('kelas', 'siswaList'));
    }
}
