<?php

namespace App\Http\Controllers;

use App\Models\Cepro;
use App\Models\Alumno; // Asegúrate de importar el modelo Alumno
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
use Illuminate\Validation\Rule;

class CeproController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return View
     */
    public function index(): View
    {
        $cepros = Cepro::paginate(10); // Muestra 10 centros educativos por página
        return view('cepros.index', compact('cepros'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @param Request $request
     * @return View
     */
    public function create(Request $request): View
    {
        // Recuperar el alumno_id si viene en la URL desde AlumnoController
        $alumnoId = $request->query('alumno_id');

        // Cargar el objeto Alumno si el ID existe (para mostrar en el mensaje informativo)
        $alumno = null;
        if ($alumnoId) {
            $alumno = Alumno::find($alumnoId);
        }

        // Obtener la lista de CEPROs existentes para el nuevo select
        $cepros = Cepro::orderBy('nom_cepro')->get(); // <--- Ya tenías esto, solo lo confirmo

        // Pasar el alumnoId, el objeto Alumno y la lista de CEPROs a la vista
        return view('cepros.create', compact('alumnoId', 'alumno', 'cepros'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  Request  $request
     * @return RedirectResponse
     */
    public function store(Request $request): RedirectResponse
    {
        // dd($request->all()); // Descomentar para depurar la entrada

        $actionType = $request->input('action_type');
        $selectedCeproId = $request->input('selected_cepro_id'); // Nuevo campo para CEPRO existente
        $alumnoId = $request->input('alumno_id'); // Asegurarnos de capturar el alumno_id del hidden input

        // === Lógica para el caso de CEPRO EXISTENTE ===
        if (!empty($selectedCeproId)) {
            $request->validate([
                'selected_cepro_id' => [
                    'required',
                    'integer',
                    Rule::exists('cepros', 'idcepro'), // Validar que el ID exista en la tabla cepros
                ],
                'alumno_id' => 'nullable|integer|exists:data_alumnos,id_datosa', // Validar alumno_id si viene
            ]);

            // Redirigir al formulario de Ugel con el alumno_id y el cepro_id existente
            return redirect()->route('ugels.create', [
                'alumno_id' => $alumnoId,
                'cepro_id' => $selectedCeproId
            ])->with('success', 'CEPRO existente seleccionado y listo para continuar con la operación de título.');
        }

        // === Lógica para el caso de NUEVO CEPRO ===
        $request->validate([
            'nom_cepro' => 'required|string|max:150|unique:cepros,nom_cepro',
            'prov_cepro' => 'nullable|string|max:100',
            'nivel' => 'nullable|string|max:50',
            'action_type' => 'required|in:save,save_and_continue', // Validamos el tipo de acción
            'alumno_id' => 'nullable|integer|exists:data_alumnos,id_datosa', // Validar alumno_id si viene
        ]);

        // Crear el Cepro, excluyendo los campos de control del formulario
        $cepro = Cepro::create($request->except(['action_type', 'alumno_id', 'selected_cepro_id']));

        if ($actionType === 'save_and_continue') {
            // Redirigir al formulario de creación de operación de títulos (Ugel),
            // pasando el ID del alumno (que viene del formulario oculto)
            // y el ID del cepro recién creado.
            return redirect()->route('ugels.create', [
                'alumno_id' => $alumnoId, // Este viene del campo oculto si existía
                'cepro_id' => $cepro->idcepro // Este es el ID del cepro recién creado
            ])->with('success', '¡Centro Educativo registrado! Ahora, por favor, registra la operación de título.');
        } else {
            // Comportamiento "Guardar" normal: redirigir al índice de cepros
            return redirect()->route('cepros.index')->with('success', 'Centro educativo creado exitosamente.');
        }
    }

    // ... (Métodos show, edit, update, destroy sin cambios)
    public function show(Cepro $cepro): View
    {
        return view('cepros.show', compact('cepro'));
    }

    public function edit(Cepro $cepro): View
    {
        return view('cepros.edit', compact('cepro'));
    }

    public function update(Request $request, Cepro $cepro): RedirectResponse
    {
        $request->validate([
            'nom_cepro' => 'required|string|max:150|unique:cepros,nom_cepro,' . $cepro->idcepro . ',idcepro',
            'prov_cepro' => 'nullable|string|max:100',
            'nivel' => 'nullable|string|max:50',
        ]);

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

        return redirect()->route('cepros.index')->with('success', 'Centro educativo actualizado exitosamente.');
    }

    public function destroy(Cepro $cepro): RedirectResponse
    {
        $cepro->delete();
        return redirect()->route('cepros.index')->with('success', 'Centro educativo eliminado exitosamente.');
    }
}