<?php

namespace App\Http\Controllers;

use App\Models\Kriteria;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class KriteriaController extends Controller
{
    // Tampilkan semua kriteria
    public function index()
    {
        $user = Auth::user();

        if (!$user || !in_array($user->role, ['super_admin', 'admin'])) {
            abort(403, 'Anda tidak punya akses.');
        }

        $kriterias = Kriteria::all();
        return view('admin.kriteria', [
            'kriterias' => $kriterias,
            'title' => 'Data Kriteria'
        ]);
    }

    // Simpan kriteria baru
    public function store(Request $request)
    {
        $user = Auth::user();

        if (!$user || !in_array($user->role, ['super_admin', 'admin'])) {
            abort(403, 'Anda tidak punya akses.');
        }

        $validated = $request->validate([
            'kode_kriteria' => 'required|string|max:10',
            'nama_kriteria' => 'required|string|max:255',
            'jenis' => 'required|in:benefit,cost',
            'bobot' => 'required|numeric|min:0|max:100',
        ]);

        // Hitung jumlah kriteria yang sudah ada
        $jumlahKriteria = \App\Models\Kriteria::count();
        $totalBobot = \App\Models\Kriteria::sum('bobot');

        // Cek jika sudah 6 kriteria atau bobot akan melebihi 100
        if ($jumlahKriteria >= 6) {
            return redirect()->back()->with('error', 'Jumlah maksimal kriteria adalah 6.');
        }

        if ($totalBobot + $request->bobot > 100) {
            return redirect()->back()->with('error', 'Total bobot tidak boleh melebihi 100.');
        }

        // Simpan
        \App\Models\Kriteria::create($validated);

        return redirect()->route('kriteria.index')->with('success', 'Kriteria berhasil disimpan.');
    }


    public function update(Request $request, $id)
    {
        $user = Auth::user();

        if (!$user || !in_array($user->role, ['super_admin', 'admin'])) {
            abort(403, 'Anda tidak punya akses.');
        }

        $request->validate([
            'kode_kriteria' => 'required',
            'nama_kriteria' => 'required',
            'jenis' => 'required|in:benefit,cost',
            'bobot' => 'required|numeric',
        ]);

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

        // Hitung total bobot dari semua kriteria KECUALI yang sedang diupdate
        $totalBobotLain = Kriteria::where('id', '!=', $id)->sum('bobot');

        // Bobot baru dari input
        $bobotBaru = $request->bobot;

        if (($totalBobotLain + $bobotBaru) > 100) {
            return redirect()->back()->with('error', 'Total bobot melebihi 100. Silakan kurangi bobot.');
        }

        $kriteria->update($request->all());

        return redirect()->route('kriteria.index')->with('success', 'Data berhasil diperbarui!');
    }


    // Hapus kriteria
    public function destroy($id)
    {
        $user = Auth::user();

        if (!$user || !in_array($user->role, ['super_admin', 'admin'])) {
            abort(403, 'Anda tidak punya akses.');
        }

        $kriteria = Kriteria::findOrFail($id);
        $kriteria->delete();

        return redirect()->back()->with('success', 'Data kriteria berhasil dihapus.');
    }
}
