<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Kriteria;
use App\Models\Kurikulum;
use Barryvdh\DomPDF\Facade\Pdf;

class KriteriaController extends Controller
{
    public function kriteria()
    {
        $kriterias = Kriteria::with('kurikulum')->get();
        $kurikulums = Kurikulum::all();
        return view('admin.kriteria', compact('kriterias', 'kurikulums'));
    }


    public function tambahkriteria(Request $request)
{
    $request->validate([
        'nama'          => 'required|string|max:255',
        'jenis'         => 'required|in:Benefit,Cost',
        'bobot'         => [
            'required',
            'numeric',
            'min:0',
            'max:1',
            'regex:/^(0(\.\d{1,2})?|1(\.0{1,2})?)$/',
        ],
        'kurikulum_id'  => 'required|exists:kurikulums,id',
    ], [
        'bobot.numeric' => 'Bobot harus berupa angka desimal, misalnya 0.50.',
        'bobot.min'     => 'Bobot minimal adalah 0.',
        'bobot.max'     => 'Bobot maksimal adalah 1.00.',
        'bobot.regex'   => 'Format bobot harus dua angka di belakang koma, contoh: 0.20 atau 1.00.',
    ]);

    // Cek apakah nama kriteria sudah ada dalam kurikulum yang sama
    $duplikatNama = Kriteria::where('nama', $request->nama)
                            ->where('kurikulum_id', $request->kurikulum_id)
                            ->exists();

    if ($duplikatNama) {
        toastr()->error('Nama kriteria sudah ada dalam kurikulum yang sama.');
        return redirect()->back()->withInput();
    }


    // Cek total bobot agar tidak melebihi 1
    $totalBobot = Kriteria::where('kurikulum_id', $request->kurikulum_id)->sum('bobot');
    $bobotBaru = $request->bobot;

    if (($totalBobot + $bobotBaru) > 1) {
        toastr()->error('Total bobot untuk kurikulum ini melebihi 1.0. Silakan periksa kembali.');
        return redirect()->back()->withInput();
    }

    // Simpan data kriteria
    $kriteria = new Kriteria();
    $kriteria->nama = $request->nama;
    $kriteria->jenis = $request->jenis;
    $kriteria->bobot = $bobotBaru;
    $kriteria->kurikulum_id = $request->kurikulum_id;

    if ($kriteria->save()) {
        toastr()->success('Kriteria berhasil ditambahkan');
    } else {
        toastr()->error('Gagal menambahkan kriteria');
    }

    return redirect()->route('kriteria');
}


    public function updatekriteria(Request $request, $id)
{
$request->validate([
    'nama'          => 'required|string|max:255',
    'jenis'         => 'required|in:Benefit,Cost',
    'bobot'         => [
        'required',
        'numeric',
        'min:0',
        'max:1',
        'regex:/^(0(\.\d{1,2})?|1(\.0{1,2})?)$/',
    ],
    'kurikulum_id'  => 'required|exists:kurikulums,id',
], [
    'bobot.numeric' => 'Bobot harus berupa angka desimal, misalnya 0.50.',
    'bobot.min'     => 'Bobot minimal adalah 0.',
    'bobot.max'     => 'Bobot maksimal adalah 1.00.',
    'bobot.regex'   => 'Format bobot harus dua angka di belakang koma, contoh: 0.20 atau 1.00.',
]);


    $kriteria = Kriteria::findOrFail($id);

    // Cek duplikat nama (kecuali untuk dirinya sendiri)
    $duplikatNama = Kriteria::where('nama', $request->nama)
                            ->where('kurikulum_id', $request->kurikulum_id)
                            ->where('id', '!=', $id)
                            ->exists();
    if ($duplikatNama) {
        toastr()->error('Nama kriteria sudah ada dalam kurikulum yang sama.');
        return redirect()->back()->withInput();
    }


    // Cek total bobot: kurangi dulu bobot lama, lalu tambah bobot baru
    $totalBobot = Kriteria::where('kurikulum_id', $request->kurikulum_id)
                          ->where('id', '!=', $id)
                          ->sum('bobot');
    $bobotBaru = $request->bobot;

    if (($totalBobot + $bobotBaru) > 1) {
        toastr()->error('Total bobot untuk kurikulum ini melebihi 1.0. Silakan periksa kembali.');
        return redirect()->back()->withInput();
    }

    // Update data
    $kriteria->nama = $request->nama;
    $kriteria->jenis = $request->jenis;
    $kriteria->bobot = $bobotBaru;
    $kriteria->kurikulum_id = $request->kurikulum_id;

    if ($kriteria->save()) {
        toastr()->success('Kriteria berhasil diperbarui');
    } else {
        toastr()->error('Gagal memperbarui kriteria');
    }

    return redirect()->route('kriteria')->with('reload', true);
}

    public function hapuskriteria($id)
    {
        $kriteria = Kriteria::findOrFail($id);
        if ($kriteria->delete()) {
            toastr()->success('Kriteria berhasil dihapus');
        } else {
            toastr()->error('Gagal menghapus kriteria');
        }
        return redirect()->route('kriteria');
    }

    public function downloadkriteria()
    {
        // Ambil data sekolah dari database
        $kriterias = Kriteria::all();
        $pdf = Pdf::loadView('admin.kriteriapdf', compact('kriterias'));
        // Download file PDF
        return $pdf->download('data_kriterias.pdf');
    }



}