<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Categoria;

class CategoriaController extends Controller
{
    private function checkSuperAdmin(Request $request)
    {
        if (!session('admin_logged_in') || session('admin_role') != 1) {
            abort(403, 'Acceso denegado. Solo Súper Administradores.');
        }
    }

    public function index(Request $request)
    {
        $this->checkSuperAdmin($request);
        $categorias = Categoria::latest()->get();
        return view('admin.categorias.index', compact('categorias'));
    }

    public function create(Request $request)
    {
        $this->checkSuperAdmin($request);
        return view('admin.categorias.form', ['categoria' => null]);
    }

    public function store(Request $request)
    {
        $this->checkSuperAdmin($request);
        $data = $request->validate([
            'nombre'   => 'required|string|max:50',
            'edad_min' => 'required|integer',
            'edad_max' => 'required|integer|gte:edad_min',
            'genero'   => 'nullable|string|max:20',
        ]);
        $data['es_libre'] = $request->has('es_libre');
        Categoria::create($data);
        return redirect()->route('admin.categorias.index')->with('admin_msg', 'Categoría creada.');
    }

    public function edit(Request $request, $id)
    {
        $this->checkSuperAdmin($request);
        $categoria = Categoria::findOrFail($id);
        return view('admin.categorias.form', compact('categoria'));
    }

    public function update(Request $request, $id)
    {
        $this->checkSuperAdmin($request);
        $categoria = Categoria::findOrFail($id);
        $data = $request->validate([
            'nombre'   => 'required|string|max:50',
            'edad_min' => 'required|integer',
            'edad_max' => 'required|integer|gte:edad_min',
            'genero'   => 'nullable|string|max:20',
        ]);
        $data['es_libre'] = $request->has('es_libre');
        $categoria->update($data);
        return redirect()->route('admin.categorias.index')->with('admin_msg', 'Categoría actualizada.');
    }

    public function destroy(Request $request, $id)
    {
        $this->checkSuperAdmin($request);
        $categoria = Categoria::findOrFail($id);
        $categoria->delete();
        return redirect()->route('admin.categorias.index')->with('admin_msg', 'Categoría eliminada.');
    }
}
