<?php

namespace App\Http\Controllers;

use App\Models\Kelas;
use App\Models\TahunAjaran;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class KelasController extends Controller
{
    /**
     * Memastikan hanya bisa diakses oleh admin
     */
    public function __construct()
    {
        $this->middleware('auth');
        // Uncomment ini jika ada sistem authorization spatie atau role
        // $this->middleware('role:admin');
    }

    public function index(Request $request)
    {
        $query = Kelas::query();
        
        // Filter by status
        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }

        // Search by nama_kelas
        if ($request->filled('q')) {
            $query->where('nama_kelas', 'like', '%' . $request->q . '%');
        }

        $kelasList = $query->orderBy('status', 'asc') // Aktif di atas
                           ->orderBy('jenjang')
                           ->orderBy('tingkat')
                           ->orderBy('paralel')
                           ->paginate(15)
                           ->withQueryString();
                           
        return view('kelas.index', compact('kelasList'));
    }

    public function searchAjax(Request $request)
    {
        $query = Kelas::aktif()->orderBy('jenjang')->orderBy('tingkat')->orderBy('paralel');
        
        if ($request->filled('q')) {
            $query->where('nama_kelas', 'like', '%' . $request->q . '%');
        }

        $kelasList = $query->paginate(30);

        $formatted = $kelasList->map(function ($kelas) {
            return ['id' => $kelas->id, 'text' => $kelas->nama_kelas];
        });

        return response()->json([
            'results' => $formatted,
            'pagination' => [
                'more' => $kelasList->hasMorePages()
            ]
        ]);
    }

    public function store(Request $request)
    {
        $request->validate([
            'jenjang' => 'required|in:TK,SD,SMP,SMA',
            'tingkat' => 'required|string',
            'paralel' => 'nullable|string',
        ]);

        // Cek duplikasi di master kelas
        $exists = Kelas::where('jenjang', $request->jenjang)
            ->where('tingkat', $request->tingkat)
            ->where('paralel', $request->paralel)
            ->exists();

        if ($exists) {
            return back()->with('error', 'Kelas tersebut sudah ada dalam data master.')->withInput();
        }

        $kelas = new Kelas();
        $kelas->jenjang = $request->jenjang;
        $kelas->tingkat = $request->tingkat;
        $kelas->paralel = $request->paralel;
        $kelas->nama_kelas = $kelas->generateNamaKelas();
        $kelas->status = 'aktif';
        $kelas->save();

        return redirect()->route('kelas.index')->with('success', 'Data Master Kelas berhasil ditambahkan.');
    }

    public function toggleStatus(Kelas $kelas)
    {
        $kelas->status = $kelas->status === 'aktif' ? 'nonaktif' : 'aktif';
        $kelas->save();

        return back()->with('success', 'Status kelas berhasil diubah.');
    }

    public function destroy($id)
    {
        $kelas = Kelas::findOrFail($id);

        if (!$kelas->canBeDeleted()) {
            return back()->with('error', 'Kelas tidak bisa dihapus karena sudah digunakan dalam transaksi atau penempatan siswa. Silakan ubah status menjadi Nonaktif saja.');
        }

        $kelas->delete();

        return back()->with('success', 'Data Master Kelas berhasil dihapus karena belum pernah digunakan.');
    }
}
