<?php

namespace App\Http\Controllers;

use App\Models\EvaluacionInstitucional;
use App\Models\EvaluacionInstitucional2;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class EvaluacionesController extends Controller
{
    /**
     * Mostrar página de evaluaciones institucionales con datos cargados
     */
    public function evaluacionesInstitucionales()
    {
        $user = Auth::user();
        $anoActual = now()->year;
        
        // Obtener datos para cada nivel del año actual
        $inicial = EvaluacionInstitucional::where([
            'user_id' => $user->id,
            'nivel' => 'inicial',
            'ano' => $anoActual,
        ])->first();

        $primaria = EvaluacionInstitucional::where([
            'user_id' => $user->id,
            'nivel' => 'primaria',
            'ano' => $anoActual,
        ])->first();

        $secundaria = EvaluacionInstitucional::where([
            'user_id' => $user->id,
            'nivel' => 'secundaria',
            'ano' => $anoActual,
        ])->first();

        return view('evaluaciones-institucionales', [
            'inicial' => $inicial,
            'primaria' => $primaria,
            'secundaria' => $secundaria,
        ]);
    }

    /**
     * Guardar progreso de Evaluaciones Institucionales (primera página)
     */
    public function guardarProgreso(Request $request)
    {
        $user = Auth::user();
        $nivel = $request->input('nivel');
        $ano = $request->input('ano', '2024');

        // Crear o actualizar registro
        $evaluacion = EvaluacionInstitucional::updateOrCreate(
            [
                'user_id' => $user->id,
                'nivel' => $nivel,
                'ano' => $ano,
            ],
            [
                'satisfactorio_comunicacion' => $request->input('satisfactorio_comunicacion', 0),
                'en_proceso_comunicacion' => $request->input('en_proceso_comunicacion', 0),
                'en_inicio_comunicacion' => $request->input('en_inicio_comunicacion', 0),
                'previo_comunicacion' => $request->input('previo_comunicacion', 0),
                'satisfactorio_matematica' => $request->input('satisfactorio_matematica', 0),
                'en_proceso_matematica' => $request->input('en_proceso_matematica', 0),
                'en_inicio_matematica' => $request->input('en_inicio_matematica', 0),
                'previo_matematica' => $request->input('previo_matematica', 0),
            ]
        );

        return response()->json([
            'success' => true,
            'message' => 'Datos guardados correctamente',
            'data' => $evaluacion
        ]);
    }

    /**
     * Obtener datos guardados de Evaluaciones Institucionales
     */
    public function obtenerDatos(Request $request)
    {
        $user = Auth::user();
        $nivel = $request->input('nivel');
        $ano = $request->input('ano', '2024');

        $evaluacion = EvaluacionInstitucional::where([
            'user_id' => $user->id,
            'nivel' => $nivel,
            'ano' => $ano,
        ])->first();

        return response()->json([
            'success' => true,
            'data' => $evaluacion ?? []
        ]);
    }

    /**
     * Guardar progreso de Evaluaciones Institucionales 2 (segunda página)
     */
    public function guardarProgreso2(Request $request)
    {
        $user = Auth::user();
        $nivel = $request->input('nivel');
        $ano = $request->input('ano', '2024');

        // Crear o actualizar registro
        $evaluacion = EvaluacionInstitucional2::updateOrCreate(
            [
                'user_id' => $user->id,
                'nivel' => $nivel,
                'ano' => $ano,
            ],
            [
                'matriculados' => $request->input('matriculados', 0),
                'aprobados' => $request->input('aprobados', 0),
                'desaprobados' => $request->input('desaprobados', 0),
                'recuperacion' => $request->input('recuperacion', 0),
                'retirados' => $request->input('retirados', 0),
                'trasladados' => $request->input('trasladados', 0),
                'fallecidos' => $request->input('fallecidos', 0),
            ]
        );

        return response()->json([
            'success' => true,
            'message' => 'Datos guardados correctamente',
            'data' => $evaluacion
        ]);
    }

    /**
     * Obtener datos guardados de Evaluaciones Institucionales 2
     */
    public function obtenerDatos2(Request $request)
    {
        $user = Auth::user();
        $nivel = $request->input('nivel');
        $ano = $request->input('ano', '2024');

        $evaluacion = EvaluacionInstitucional2::where([
            'user_id' => $user->id,
            'nivel' => $nivel,
            'ano' => $ano,
        ])->first();

        return response()->json([
            'success' => true,
            'data' => $evaluacion ?? []
        ]);
    }

    /**
     * Mostrar resumen de Evaluaciones Institucionales
     */
    public function resumenEvaluaciones1()
    {
        // Verificar si viene userId en query (solicitud del admin)
        $requestUserId = request()->input('userId');
        if ($requestUserId && Auth::user()->role === 'admin') {
            $userId = $requestUserId;
        } else {
            $userId = Auth::id();
        }

        $user = Auth::user();
        
        // Obtener datos agrupados por nivel de todas las evaluaciones del usuario
        $evaluaciones = EvaluacionInstitucional::where('user_id', $userId)
            ->orderBy('nivel')
            ->orderBy('ano', 'desc')
            ->get()
            ->groupBy('nivel');

        if ($evaluaciones->isEmpty()) {
            return redirect('/evaluaciones-institucionales')->with('warning', 'Por favor completa las Evaluaciones Institucionales primero');
        }

        return view('resumen-evaluaciones-institucionales', ['evaluaciones' => $evaluaciones]);
    }

    /**
     * Mostrar resumen de Evaluaciones Institucionales 2
     */
    public function resumenEvaluaciones2()
    {
        // Verificar si viene userId en query (solicitud del admin)
        $requestUserId = request()->input('userId');
        if ($requestUserId && Auth::user()->role === 'admin') {
            $userId = $requestUserId;
        } else {
            $userId = Auth::id();
        }

        $user = Auth::user();
        
        // Obtener datos agrupados por nivel de todas las evaluaciones 2 del usuario
        $evaluaciones = EvaluacionInstitucional2::where('user_id', $userId)
            ->orderBy('nivel')
            ->orderBy('ano', 'desc')
            ->get()
            ->groupBy('nivel');

        if ($evaluaciones->isEmpty()) {
            return redirect('/evaluaciones-institucionales2')->with('warning', 'Por favor completa las Evaluaciones Institucionales 2 primero');
        }

        return view('resumen-evaluaciones-institucionales2', ['evaluaciones' => $evaluaciones]);
    }

    /**
     * Ver resumen de Evaluaciones sin header/footer (Layout blank)
     */
    public function verResumenEvaluaciones1()
    {
        $user = Auth::user();
        
        // Obtener datos agrupados por nivel de todas las evaluaciones del usuario
        $evaluaciones = EvaluacionInstitucional::where('user_id', $user->id)
            ->orderBy('nivel')
            ->orderBy('ano', 'desc')
            ->get()
            ->groupBy('nivel');

        if ($evaluaciones->isEmpty()) {
            return redirect('/evaluaciones-institucionales')->with('warning', 'Por favor completa las Evaluaciones Institucionales primero');
        }

        return view('resumen-evaluaciones-institucionales', ['evaluaciones' => $evaluaciones]);
    }

    /**
     * Ver resumen de Evaluaciones 2 sin header/footer (Layout blank)
     */
    public function verResumenEvaluaciones2()
    {
        $user = Auth::user();
        
        // Obtener datos agrupados por nivel de todas las evaluaciones 2 del usuario
        $evaluaciones = EvaluacionInstitucional2::where('user_id', $user->id)
            ->orderBy('nivel')
            ->orderBy('ano', 'desc')
            ->get()
            ->groupBy('nivel');

        if ($evaluaciones->isEmpty()) {
            return redirect('/evaluaciones-institucionales2')->with('warning', 'Por favor completa las Evaluaciones Institucionales 2 primero');
        }

        return view('resumen-evaluaciones-institucionales2', ['evaluaciones' => $evaluaciones]);
    }
}
