<?php

namespace App\Http\Controllers\Supervisor;

use App\Http\Controllers\Controller;
use App\Models\Pengesahan;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class TetapanController extends Controller
{
    /**
     * Paparkan halaman tetapan kebenaran edit semula.
     */
    public function index(Request $request)
    {
        $supervisor = Auth::user();

        // Senarai pengesahan yang sedang dibenarkan edit semula
        // (hanya untuk daerah supervisor)
        $aktif = Pengesahan::with('user')
            ->where('status', 'lulus')
            ->where('boleh_edit_semula', true)
            ->whereHas('user', function ($q) use ($supervisor) {
                $q->where('daerah', $supervisor->daerah);
            })
            ->orderByDesc('dibenarkan_pada')
            ->get();

        return view('supervisor.tetapan.index', compact('aktif'));
    }

    /**
     * Berikan kebenaran edit semula kepada pemohon berdasarkan kod sekolah.
     */
    public function store(Request $request)
    {
        $request->validate([
            'kod_sekolah' => 'required|string|max:50',
        ]);

        $supervisor = Auth::user();
        $kod = trim($request->input('kod_sekolah'));

        // Cari pemohon yang sepadan (mestilah dalam daerah supervisor)
        $pemohon = User::where('role', 'pemohon')
            ->where('kod_sekolah', $kod)
            ->where('daerah', $supervisor->daerah)
            ->first();

        if (!$pemohon) {
            return back()->with('error', 'Tiada pemohon dijumpai dengan kod sekolah ' . $kod . ' dalam daerah anda.');
        }

        // Kemaskini semua pengesahan yang berstatus 'lulus' bagi pemohon ini
        $count = Pengesahan::where('user_id', $pemohon->id)
            ->where('status', 'lulus')
            ->update([
                'boleh_edit_semula' => true,
                'dibenarkan_oleh'   => $supervisor->id,
                'dibenarkan_pada'   => now(),
            ]);

        if ($count === 0) {
            return back()->with('warning', 'Tiada rekod pengesahan berstatus lulus untuk sekolah ' . $kod . '.');
        }

        return back()->with('success', 'Kebenaran edit semula telah diberikan kepada ' . $pemohon->nama_sekolah . ' (' . $kod . '). ' . $count . ' rekod dikemaskini.');
    }

    /**
     * Tarik balik kebenaran edit semula bagi satu rekod pengesahan.
     */
    public function revoke(Request $request, Pengesahan $pengesahan)
    {
        $supervisor = Auth::user();

        // Pastikan pengesahan ini milik pemohon dalam daerah supervisor
        if (!$pengesahan->user || $pengesahan->user->daerah !== $supervisor->daerah) {
            abort(403);
        }

        $pengesahan->update([
            'boleh_edit_semula' => false,
            'dibenarkan_oleh'   => null,
            'dibenarkan_pada'   => null,
        ]);

        return back()->with('success', 'Kebenaran edit semula telah ditarik balik.');
    }
}
