<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\SiswaKelas;
use App\Models\TahunAjaran;

class SiswaKelasController extends Controller
{
    /**
     * LIST SISWA PER TAHUN AJARAN AKTIF
     */
    public function index()
    {
        $activeYear = TahunAjaran::where('status', 'aktif')->first();

        if (!$activeYear) {
            return back()->with('error', 'Tahun ajaran aktif belum diset');
        }

        $data = SiswaKelas::with(['siswa', 'kelas'])
            ->where('tahun_ajaran_id', $activeYear->id)
            ->orderBy('kelas_id')
            ->get();

        return view('siswa_kelas.index', compact('data', 'activeYear'))
        ->with('error', 'Tahun ajaran aktif belum diset');
    }

    /**
     * SIMPAN / INPUT SISWA KELAS
     */
    public function store(Request $request)
    {
        $request->validate([
        'siswa_id' => 'required|exists:siswa,id',
        'kelas_id' => 'required|exists:kelas,id',
        'tahun_ajaran_id' => 'required|exists:tahun_ajaran,id',
    ]);

        // cegah duplikat (sesuai UNIQUE constraint)
        $exists = SiswaKelas::where('siswa_id', $request->siswa_id)
            ->where('tahun_ajaran_id', $request->tahun_ajaran_id)
            ->where('kelas_id', $request->kelas_id)
            ->exists();

        if ($exists) {
            return back()->with('error', 'Siswa sudah terdaftar di tahun ajaran ini');
        }

        SiswaKelas::create([
            'siswa_id' => $request->siswa_id,
            'kelas_id' => $request->kelas_id,
            'tahun_ajaran_id' => $request->tahun_ajaran_id,
        ]);

        $tahun = TahunAjaran::find($request->tahun_ajaran_id);
        if ($tahun && $tahun->status === 'aktif') {
            $siswa = \App\Models\Siswa::find($request->siswa_id);
            $kelas = \App\Models\Kelas::find($request->kelas_id);
            app(\App\Services\TagihanService::class)->generateTagihanSiswa($siswa, $kelas, $tahun);
        }

        return back()->with('success', 'Data berhasil disimpan');
    }

    /**
     * UPDATE KELAS (untuk proses import/edit Excel)
     */
    public function update(Request $request, $id)
    {
        $request->validate([
            'kelas_id' => 'required',
        ]);

        $data = SiswaKelas::findOrFail($id);
        $exists = SiswaKelas::where('siswa_id', $data->siswa_id)
        ->where('tahun_ajaran_id', $data->tahun_ajaran_id)
        ->where('id', '!=', $id)
        ->exists();

        if ($exists) {
            return back()->with('error', 'Data sudah ada untuk siswa di tahun ajaran ini');
        }
        $data->update([
            'kelas_id' => $request->kelas_id,
        ]);

        $tahun = TahunAjaran::find($data->tahun_ajaran_id);
        if ($tahun && $tahun->status === 'aktif') {
            $siswa = \App\Models\Siswa::find($data->siswa_id);
            $kelas = \App\Models\Kelas::find($request->kelas_id);
            app(\App\Services\TagihanService::class)->generateTagihanSiswa($siswa, $kelas, $tahun);
        }

        return back()->with('success', 'Data berhasil diupdate');
    }
}
