<?php

namespace App\Http\Controllers;

use App\Models\Compromise;
use App\Models\Compromiso2;
use App\Models\Compromiso3;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;

class CompromiseController extends Controller
{
    /**
     * Inicia el diagnóstico libre (sin registro)
     */
    public function compromise1Libre()
    {
        $sessionData = session('guest_compromise1');
        $compromise = $sessionData ? (object)$sessionData : null;
        
        return view('compromise.compromiso1_libre', ['compromise' => $compromise]);
    }

    /**
     * Guarda el progreso del diagnóstico libre en la sesión
     */
    public function saveProgressLibre(Request $request)
    {
        try {
            $validated = $request->validate([
                'pregunta_1' => 'nullable|numeric|min:1|max:5',
                'pregunta_2' => 'nullable|numeric|min:1|max:5',
                'pregunta_3' => 'nullable|numeric|min:1|max:5',
                'pregunta_4' => 'nullable|numeric|min:1|max:5',
                'pregunta_5' => 'nullable|numeric|min:1|max:5',
                'pregunta_6' => 'nullable|numeric|min:1|max:5',
                'pregunta_7' => 'nullable|numeric|min:1|max:5',
                'pregunta_8' => 'nullable|numeric|min:1|max:5',
                'pregunta_9' => 'nullable|numeric|min:1|max:5',
                'pregunta_10' => 'nullable|numeric|min:1|max:5',
                'pregunta_11' => 'nullable|numeric|min:1|max:5',
                'pregunta_12' => 'nullable|numeric|min:1|max:5',
                'pregunta_13' => 'nullable|numeric|min:1|max:5',
                'pregunta_14' => 'nullable|numeric|min:1|max:5',
                'pregunta_15' => 'nullable|numeric|min:1|max:5',
                'pregunta_16' => 'nullable|numeric|min:1|max:5',
                'pregunta_17' => 'nullable|numeric|min:1|max:5',
                'pregunta_18' => 'nullable|numeric|min:1|max:5',
                'pregunta_19' => 'nullable|numeric|min:1|max:5',
                'pregunta_20' => 'nullable|numeric|min:1|max:5',
                'pregunta_21' => 'nullable|numeric|min:1|max:5',
                'pregunta_22' => 'nullable|numeric|min:1|max:5',
                'pregunta_23' => 'nullable|numeric|min:1|max:5',
                'pregunta_24' => 'nullable|numeric|min:1|max:5',
                'pregunta_25' => 'nullable|numeric|min:1|max:5',
            ]);

            $guestData = session('guest_compromise1', []);
            $guestData = array_merge($guestData, array_filter($validated, fn($v) => !is_null($v)));
            session(['guest_compromise1' => $guestData]);

            $answeredQuestions = count(array_filter($guestData, fn($v) => !is_null($v)));

            return response()->json([
                'success' => true,
                'message' => "Progreso guardado ($answeredQuestions/25)",
                'answered' => $answeredQuestions,
                'total' => 25
            ]);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
        }
    }

    /**
     * Muestra el resumen del diagnóstico libre
     */
    public function resumenCompromiso1Libre()
    {
        $sessionData = session('guest_compromise1');
        $compromise = $sessionData ? (object)$sessionData : null;

        if (!$compromise || count((array)$compromise) < 25) {
            return redirect()->route('compromiso1.libre')->with('warning', 'Por favor completa todas las preguntas.');
        }

        // Reutilizamos la lógica de resumen (mismos cálculos que resumenCompromiso1)
        // ... (esta lógica se puede abstraer en un servicio si es necesario, pero por ahora la replicamos o llamamos al método privado)
        return $this->generarResumenVista($compromise);
    }

    private function generarResumenVista($compromise) {
        // Mapeo de preguntas por sección con títulos ajustados y consistentes
        $secciones = [
            1 => ['nombre' => 'Gestión de las Condiciones Operativas', 'preguntas' => [1, 2, 3, 4, 5]],
            2 => ['nombre' => 'Gestión de la Práctica Pedagógica', 'preguntas' => [6, 7, 8, 9, 10]],
            3 => ['nombre' => 'Gestión del Bienestar Escolar', 'preguntas' => [11, 12, 13, 14, 15]],
            4 => ['nombre' => 'Compromiso de Gestión Escolar 1', 'preguntas' => [16, 17, 18, 19, 20]],
            5 => ['nombre' => 'Compromiso de Gestión Escolar 2', 'preguntas' => [21, 22, 23, 24, 25]]
        ];

        // Analizar respuestas
        $analisis = [];
        $debilidades = [];
        $en_proceso = [];
        $fortalezas = [];
        $preguntasTexto = $this->obtenerTextosPreguntas();

        foreach ($secciones as $seccionId => $seccion) {
            $debilidades_count = 0;
            $en_proceso_count = 0;
            $fortalezas_count = 0;
            $total_seccion = 0;

            foreach ($seccion['preguntas'] as $pregunta_id) {
                $valor = $compromise->{"pregunta_$pregunta_id"} ?? null;
                $total_seccion++;

                if ($valor == 1 || $valor == 2) {
                    $debilidades_count++;
                    $debilidades[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                } elseif ($valor == 3) {
                    $en_proceso_count++;
                    $en_proceso[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id"
                    ];
                } elseif ($valor == 4 || $valor == 5) {
                    $fortalezas_count++;
                    $fortalezas[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                }
            }

            $analisis[$seccionId] = [
                'nombre' => $seccion['nombre'],
                'debilidades' => $debilidades_count,
                'en_proceso' => $en_proceso_count,
                'fortalezas' => $fortalezas_count,
                'total' => $total_seccion,
                'porcentaje_debilidades' => ($total_seccion > 0) ? round(($debilidades_count / $total_seccion) * 100, 1) : 0,
                'porcentaje_en_proceso' => ($total_seccion > 0) ? round(($en_proceso_count / $total_seccion) * 100, 1) : 0,
                'porcentaje_fortalezas' => ($total_seccion > 0) ? round(($fortalezas_count / $total_seccion) * 100, 1) : 0
            ];
        }

        return view('resumen-compromiso1', [
            'analisis' => $analisis,
            'debilidades' => $debilidades,
            'en_proceso' => $en_proceso,
            'fortalezas' => $fortalezas,
            'total_debilidades' => count($debilidades),
            'total_en_proceso' => count($en_proceso),
            'total_fortalezas' => count($fortalezas),
            'compromiso' => $compromise
        ]);
    }

    public function nuevaEvaluacion()
    {
        // Limpiar todos los caches de evaluaciones anteriores
        Cache::forget('compromise1_' . Auth::id());
        Cache::forget('compromise2_' . Auth::id());
        Cache::forget('compromise3_' . Auth::id());
        
        // Limpiar sesión de datos anteriores
        session()->forget('institucion_data');
        
        // Redirigir a compromiso1 para comenzar nuevo diagnóstico
        return redirect('/compromiso1');
    }

    public function compromise1()
    {
        // Cache key único por usuario o sesión para invitados
        $userId = Auth::id();
        
        // Si es invitado, no usamos cache para asegurar que siempre vea lo de la sesión actual
        if (!$userId) {
            $sessionData = session('guest_compromise1');
            $compromise = $sessionData ? (object)$sessionData : null;
            return view('compromise.compromiso1', ['compromise' => $compromise]);
        }

        $cacheKey = 'compromise1_' . $userId;
        
        // Intentar obtener del cache (5 minutos) para usuarios registrados
        $compromise = Cache::remember($cacheKey, 300, function () use ($userId) {
            return Compromise::where('user_id', $userId)
                ->where('compromise_type', 'compromiso1')
                ->first();
        });

        return view('compromise.compromiso1', ['compromise' => $compromise]);
    }

    public function compromiso2()
    {
        // Cache key único por usuario
        $cacheKey = 'compromise2_' . Auth::id();
        
        // Intentar obtener del cache (5 minutos)
        $compromiso2 = Cache::remember($cacheKey, 300, function () {
            return Compromiso2::where('user_id', Auth::id())
                ->where('compromise_type', 'compromiso2')
                ->first();
        });

        return view('compromise.compromiso2', ['compromiso2' => $compromiso2]);
    }

    public function store(Request $request)
    {
        // Validar que TODAS las preguntas estén respondidas (required)
        $validated = $request->validate([
            'pregunta_1' => 'required|integer|min:1|max:5',
            'pregunta_2' => 'required|integer|min:1|max:5',
            'pregunta_3' => 'required|integer|min:1|max:5',
            'pregunta_4' => 'required|integer|min:1|max:5',
            'pregunta_5' => 'required|integer|min:1|max:5',
            'pregunta_6' => 'required|integer|min:1|max:5',
            'pregunta_7' => 'required|integer|min:1|max:5',
            'pregunta_8' => 'required|integer|min:1|max:5',
            'pregunta_9' => 'required|integer|min:1|max:5',
            'pregunta_10' => 'required|integer|min:1|max:5',
            'pregunta_11' => 'required|integer|min:1|max:5',
            'pregunta_12' => 'required|integer|min:1|max:5',
            'pregunta_13' => 'required|integer|min:1|max:5',
            'pregunta_14' => 'required|integer|min:1|max:5',
            'pregunta_15' => 'required|integer|min:1|max:5',
            'pregunta_16' => 'required|integer|min:1|max:5',
            'pregunta_17' => 'required|integer|min:1|max:5',
            'pregunta_18' => 'required|integer|min:1|max:5',
            'pregunta_19' => 'required|integer|min:1|max:5',
            'pregunta_20' => 'required|integer|min:1|max:5',
            'pregunta_21' => 'required|integer|min:1|max:5',
            'pregunta_22' => 'required|integer|min:1|max:5',
            'pregunta_23' => 'required|integer|min:1|max:5',
            'pregunta_24' => 'required|integer|min:1|max:5',
            'pregunta_25' => 'required|integer|min:1|max:5',
        ]);

        // Obtener o crear registro
        $compromise = Compromise::firstOrCreate(
            [
                'user_id' => Auth::id(),
                'compromise_type' => 'compromiso1',
            ],
            array_merge($validated, ['completed' => true])
        );

        // Actualizar si ya existe
        if (!$compromise->wasRecentlyCreated) {
            $compromise->update(array_merge($validated, ['completed' => true]));
        }

        // Limpiar cache para que refleje los cambios
        Cache::forget('compromise1_' . Auth::id());

        return redirect('/compromiso2')->with('success', 'Respuestas guardadas correctamente. ¡Excelente trabajo!');
    }

    public function saveProgress(Request $request)
    {
        try {
            // Validar datos - permite valores nulos (guardado parcial)
            // Aceptar strings numéricos o valores vacíos
            $validated = $request->validate([
                'pregunta_1' => 'nullable|numeric|min:1|max:5',
                'pregunta_2' => 'nullable|numeric|min:1|max:5',
                'pregunta_3' => 'nullable|numeric|min:1|max:5',
                'pregunta_4' => 'nullable|numeric|min:1|max:5',
                'pregunta_5' => 'nullable|numeric|min:1|max:5',
                'pregunta_6' => 'nullable|numeric|min:1|max:5',
                'pregunta_7' => 'nullable|numeric|min:1|max:5',
                'pregunta_8' => 'nullable|numeric|min:1|max:5',
                'pregunta_9' => 'nullable|numeric|min:1|max:5',
                'pregunta_10' => 'nullable|numeric|min:1|max:5',
                'pregunta_11' => 'nullable|numeric|min:1|max:5',
                'pregunta_12' => 'nullable|numeric|min:1|max:5',
                'pregunta_13' => 'nullable|numeric|min:1|max:5',
                'pregunta_14' => 'nullable|numeric|min:1|max:5',
                'pregunta_15' => 'nullable|numeric|min:1|max:5',
                'pregunta_16' => 'nullable|numeric|min:1|max:5',
                'pregunta_17' => 'nullable|numeric|min:1|max:5',
                'pregunta_18' => 'nullable|numeric|min:1|max:5',
                'pregunta_19' => 'nullable|numeric|min:1|max:5',
                'pregunta_20' => 'nullable|numeric|min:1|max:5',
                'pregunta_21' => 'nullable|numeric|min:1|max:5',
                'pregunta_22' => 'nullable|numeric|min:1|max:5',
                'pregunta_23' => 'nullable|numeric|min:1|max:5',
                'pregunta_24' => 'nullable|numeric|min:1|max:5',
                'pregunta_25' => 'nullable|numeric|min:1|max:5',
            ], [
                '*.numeric' => 'El valor debe ser numérico',
                '*.min' => 'El valor debe ser al menos 1',
                '*.max' => 'El valor no puede ser mayor que 5',
            ]);

            // Convertir strings vacíos a null y strings numéricos a integers
            foreach ($validated as $key => $value) {
                if ($value === '' || $value === '0') {
                    $validated[$key] = null;
                } elseif ($value !== null) {
                    $validated[$key] = (int)$value;
                }
            }

            // Manejar sesión para invitados
            if (!Auth::check()) {
                $guestData = session('guest_compromise1', []);
                $guestData = array_merge($guestData, $validated);
                session(['guest_compromise1' => $guestData]);

                // Limpiar cache de invitado
                Cache::forget('guest_compromise1_' . session()->getId());

                // Contar respondidas
                $answeredQuestions = count(array_filter($guestData, fn($v) => !is_null($v)));

                return response()->json([
                    'success' => true,
                    'message' => "Progreso de invitado guardado ($answeredQuestions/25)",
                    'answered' => $answeredQuestions,
                    'total' => 25,
                    'timestamp' => now()->format('H:i:s')
                ]);
            }

            // Obtener o crear registro de compromiso para usuarios registrados
            $compromise = Compromise::firstOrCreate(
                [
                    'user_id' => Auth::id(),
                    'compromise_type' => 'compromiso1',
                ],
                ['completed' => false]
            );

            // Actualizar solo los campos que están en la solicitud
            foreach ($validated as $key => $value) {
                $compromise->$key = $value;
            }
            $compromise->save();

            // Limpiar cache para que refleje los cambios
            Cache::forget('compromise1_' . Auth::id());

            // Contar cuántas preguntas están respondidas
            $answeredQuestions = 0;
            for ($i = 1; $i <= 25; $i++) {
                if ($compromise->{"pregunta_$i"} !== null) {
                    $answeredQuestions++;
                }
            }

            return response()->json([
                'success' => true,
                'message' => "Progreso guardado automáticamente ($answeredQuestions/25)",
                'answered' => $answeredQuestions,
                'total' => 25,
                'timestamp' => now()->format('H:i:s')
            ]);
        } catch (\Illuminate\Validation\ValidationException $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error de validación',
                'errors' => $e->errors()
            ], 422);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error al guardar el progreso: ' . $e->getMessage(),
                'error' => $e->getMessage()
            ], 500);
        }
    }

    public function store2(Request $request)
    {
        // Validar que TODAS las preguntas estén respondidas (required)
        $validated = $request->validate([
            'pregunta_1' => 'required|integer|min:1|max:5',
            'pregunta_2' => 'required|integer|min:1|max:5',
            'pregunta_3' => 'required|integer|min:1|max:5',
            'pregunta_4' => 'required|integer|min:1|max:5',
            'pregunta_5' => 'required|integer|min:1|max:5',
            'pregunta_6' => 'required|integer|min:1|max:5',
            'pregunta_7' => 'required|integer|min:1|max:5',
            'pregunta_8' => 'required|integer|min:1|max:5',
            'pregunta_9' => 'required|integer|min:1|max:5',
            'pregunta_10' => 'required|integer|min:1|max:5',
            'pregunta_11' => 'required|integer|min:1|max:5',
            'pregunta_12' => 'required|integer|min:1|max:5',
            'pregunta_13' => 'required|integer|min:1|max:5',
            'pregunta_14' => 'required|integer|min:1|max:5',
            'pregunta_15' => 'required|integer|min:1|max:5',
            'pregunta_16' => 'required|integer|min:1|max:5',
            'pregunta_17' => 'required|integer|min:1|max:5',
            'pregunta_18' => 'required|integer|min:1|max:5',
            'pregunta_19' => 'required|integer|min:1|max:5',
            'pregunta_20' => 'required|integer|min:1|max:5',
            'pregunta_21' => 'required|integer|min:1|max:5',
            'pregunta_22' => 'required|integer|min:1|max:5',
            'pregunta_23' => 'required|integer|min:1|max:5',
            'pregunta_24' => 'required|integer|min:1|max:5',
            'pregunta_25' => 'required|integer|min:1|max:5',
        ]);

        // Obtener o crear registro
        $compromiso2 = Compromiso2::firstOrCreate(
            [
                'user_id' => Auth::id(),
                'compromise_type' => 'compromiso2',
            ],
            array_merge($validated, ['completed' => true])
        );

        // Actualizar si ya existe
        if (!$compromiso2->wasRecentlyCreated) {
            $compromiso2->update(array_merge($validated, ['completed' => true]));
        }

        return redirect('/compromiso3')->with('success', 'Respuestas guardadas correctamente. ¡Excelente trabajo!');
    }

    public function saveProgress2(Request $request)
    {
        try {
            // Validar que el usuario esté autenticado
            if (!Auth::check()) {
                return response()->json([
                    'success' => false, 
                    'message' => 'No autorizado',
                    'error' => 'Debes iniciar sesión para guardar tu progreso.'
                ], 401);
            }

            // Validar datos - permite valores nulos (guardado parcial)
            // Aceptar strings numéricos o valores vacíos
            $validated = $request->validate([
                'pregunta_1' => 'nullable|numeric|min:1|max:5',
                'pregunta_2' => 'nullable|numeric|min:1|max:5',
                'pregunta_3' => 'nullable|numeric|min:1|max:5',
                'pregunta_4' => 'nullable|numeric|min:1|max:5',
                'pregunta_5' => 'nullable|numeric|min:1|max:5',
                'pregunta_6' => 'nullable|numeric|min:1|max:5',
                'pregunta_7' => 'nullable|numeric|min:1|max:5',
                'pregunta_8' => 'nullable|numeric|min:1|max:5',
                'pregunta_9' => 'nullable|numeric|min:1|max:5',
                'pregunta_10' => 'nullable|numeric|min:1|max:5',
                'pregunta_11' => 'nullable|numeric|min:1|max:5',
                'pregunta_12' => 'nullable|numeric|min:1|max:5',
                'pregunta_13' => 'nullable|numeric|min:1|max:5',
                'pregunta_14' => 'nullable|numeric|min:1|max:5',
                'pregunta_15' => 'nullable|numeric|min:1|max:5',
                'pregunta_16' => 'nullable|numeric|min:1|max:5',
                'pregunta_17' => 'nullable|numeric|min:1|max:5',
                'pregunta_18' => 'nullable|numeric|min:1|max:5',
                'pregunta_19' => 'nullable|numeric|min:1|max:5',
                'pregunta_20' => 'nullable|numeric|min:1|max:5',
                'pregunta_21' => 'nullable|numeric|min:1|max:5',
                'pregunta_22' => 'nullable|numeric|min:1|max:5',
                'pregunta_23' => 'nullable|numeric|min:1|max:5',
                'pregunta_24' => 'nullable|numeric|min:1|max:5',
                'pregunta_25' => 'nullable|numeric|min:1|max:5',
            ], [
                '*.numeric' => 'El valor debe ser numérico',
                '*.min' => 'El valor debe ser al menos 1',
                '*.max' => 'El valor no puede ser mayor que 5',
            ]);

            // Convertir strings vacíos a null y strings numéricos a integers
            foreach ($validated as $key => $value) {
                if ($value === '' || $value === '0') {
                    $validated[$key] = null;
                } elseif ($value !== null) {
                    $validated[$key] = (int)$value;
                }
            }

            // Obtener o crear registro de compromiso2
            $compromiso2 = Compromiso2::firstOrCreate(
                [
                    'user_id' => Auth::id(),
                    'compromise_type' => 'compromiso2',
                ],
                ['completed' => false]
            );

            // Actualizar solo los campos que están en la solicitud
            foreach ($validated as $key => $value) {
                $compromiso2->$key = $value;
            }
            $compromiso2->save();

            // Contar cuántas preguntas están respondidas
            $answeredQuestions = 0;
            for ($i = 1; $i <= 25; $i++) {
                if ($compromiso2->{"pregunta_$i"} !== null) {
                    $answeredQuestions++;
                }
            }

            return response()->json([
                'success' => true,
                'message' => "Progreso guardado automáticamente ($answeredQuestions/25)",
                'answered' => $answeredQuestions,
                'total' => 25,
                'timestamp' => now()->format('H:i:s')
            ]);
        } catch (\Illuminate\Validation\ValidationException $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error de validación',
                'errors' => $e->errors()
            ], 422);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error al guardar el progreso: ' . $e->getMessage(),
                'error' => $e->getMessage()
            ], 500);
        }
    }

    public function compromiso3()
    {
        // Cargar datos guardados del usuario autenticado
        $compromiso3 = Compromiso3::where('user_id', Auth::id())
            ->where('compromise_type', 'compromiso3')
            ->first();

        // Si no existe, retornar null (se creará al guardar por primera vez)
        return view('compromise.compromiso3', ['compromiso3' => $compromiso3]);
    }

    public function store3(Request $request)
    {
        // Validar que TODAS las preguntas estén respondidas (required)
        $validated = $request->validate([
            'pregunta_1' => 'required|integer|min:1|max:5',
            'pregunta_2' => 'required|integer|min:1|max:5',
            'pregunta_3' => 'required|integer|min:1|max:5',
            'pregunta_4' => 'required|integer|min:1|max:5',
            'pregunta_5' => 'required|integer|min:1|max:5',
            'pregunta_6' => 'required|integer|min:1|max:5',
            'pregunta_7' => 'required|integer|min:1|max:5',
            'pregunta_8' => 'required|integer|min:1|max:5',
            'pregunta_9' => 'required|integer|min:1|max:5',
            'pregunta_10' => 'required|integer|min:1|max:5',
            'pregunta_11' => 'required|integer|min:1|max:5',
            'pregunta_12' => 'required|integer|min:1|max:5',
            'pregunta_13' => 'required|integer|min:1|max:5',
            'pregunta_14' => 'required|integer|min:1|max:5',
            'pregunta_15' => 'required|integer|min:1|max:5',
            'pregunta_16' => 'required|integer|min:1|max:5',
            'pregunta_17' => 'required|integer|min:1|max:5',
            'pregunta_18' => 'required|integer|min:1|max:5',
            'pregunta_19' => 'required|integer|min:1|max:5',
            'pregunta_20' => 'required|integer|min:1|max:5',
            'pregunta_21' => 'required|integer|min:1|max:5',
            'pregunta_22' => 'required|integer|min:1|max:5',
            'pregunta_23' => 'required|integer|min:1|max:5',
            'pregunta_24' => 'required|integer|min:1|max:5',
            'pregunta_25' => 'required|integer|min:1|max:5',
        ], [
            '*.required' => 'Todas las preguntas deben ser respondidas',
            '*.integer' => 'El valor debe ser numérico',
            '*.min' => 'El valor debe ser al menos 1',
            '*.max' => 'El valor no puede ser mayor que 5',
        ]);

        // Convertir strings vacíos a null si es necesario
        foreach ($validated as $key => $value) {
            if ($value === '' || $value === '0') {
                $validated[$key] = null;
            }
        }

        // Obtener o crear registro de compromiso
        $compromiso3 = Compromiso3::firstOrCreate(
            [
                'user_id' => Auth::id(),
                'compromise_type' => 'compromiso3',
            ],
            ['completed' => false]
        );

        // Marcar como completado
        $validated['completed'] = true;
        $compromiso3->fill($validated)->save();

        return redirect()->route('info-institucion')->with('success', 'Compromiso 3 completado. Por favor completa la información de tu institución.');
    }

    public function saveProgress3(Request $request)
    {
        try {
            // Validar datos (campos opcionales: nullable permite guardar sin responder todas)
            $validated = $request->validate([
                'pregunta_1' => 'nullable|integer|min:1|max:5',
                'pregunta_2' => 'nullable|integer|min:1|max:5',
                'pregunta_3' => 'nullable|integer|min:1|max:5',
                'pregunta_4' => 'nullable|integer|min:1|max:5',
                'pregunta_5' => 'nullable|integer|min:1|max:5',
                'pregunta_6' => 'nullable|integer|min:1|max:5',
                'pregunta_7' => 'nullable|integer|min:1|max:5',
                'pregunta_8' => 'nullable|integer|min:1|max:5',
                'pregunta_9' => 'nullable|integer|min:1|max:5',
                'pregunta_10' => 'nullable|integer|min:1|max:5',
                'pregunta_11' => 'nullable|integer|min:1|max:5',
                'pregunta_12' => 'nullable|integer|min:1|max:5',
                'pregunta_13' => 'nullable|integer|min:1|max:5',
                'pregunta_14' => 'nullable|integer|min:1|max:5',
                'pregunta_15' => 'nullable|integer|min:1|max:5',
                'pregunta_16' => 'nullable|integer|min:1|max:5',
                'pregunta_17' => 'nullable|integer|min:1|max:5',
                'pregunta_18' => 'nullable|integer|min:1|max:5',
                'pregunta_19' => 'nullable|integer|min:1|max:5',
                'pregunta_20' => 'nullable|integer|min:1|max:5',
                'pregunta_21' => 'nullable|integer|min:1|max:5',
                'pregunta_22' => 'nullable|integer|min:1|max:5',
                'pregunta_23' => 'nullable|integer|min:1|max:5',
                'pregunta_24' => 'nullable|integer|min:1|max:5',
                'pregunta_25' => 'nullable|integer|min:1|max:5',
            ], [
                '*.integer' => 'El valor debe ser numérico',
                '*.min' => 'El valor debe ser al menos 1',
                '*.max' => 'El valor no puede ser mayor que 5',
            ]);

            // Convertir strings vacíos a null
            foreach ($validated as $key => $value) {
                if ($value === '' || $value === '0') {
                    $validated[$key] = null;
                }
            }

            // Obtener o crear registro de compromiso
            $compromiso3 = Compromiso3::firstOrCreate(
                [
                    'user_id' => Auth::id(),
                    'compromise_type' => 'compromiso3',
                ],
                ['completed' => false]
            );

            // Actualizar solo los campos que están en la solicitud
            foreach ($validated as $key => $value) {
                $compromiso3->$key = $value;
            }
            $compromiso3->save();

            // Contar cuántas preguntas están respondidas
            $answeredQuestions = 0;
            for ($i = 1; $i <= 25; $i++) {
                if ($compromiso3->{"pregunta_$i"} !== null) {
                    $answeredQuestions++;
                }
            }

            return response()->json([
                'success' => true,
                'message' => "Progreso guardado automáticamente ($answeredQuestions/25)",
                'answered' => $answeredQuestions,
                'total' => 25,
                'timestamp' => now()->format('H:i:s')
            ]);
        } catch (\Illuminate\Validation\ValidationException $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error de validación',
                'errors' => $e->errors()
            ], 422);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error al guardar el progreso: ' . $e->getMessage(),
                'error' => $e->getMessage()
            ], 500);
        }
    }

    public function resumenCompromiso1()
    {
        // Verificar si viene userId en query (solicitud del admin)
        $requestUserId = request()->input('userId');
        if ($requestUserId && Auth::user()->role === 'admin') {
            $userId = $requestUserId;
        } else {
            // Obtener datos del compromiso1 (usuario o invitado)
            $userId = Auth::id();
        }

        if ($userId) {
            $compromise = Compromise::where('user_id', $userId)
                ->where('compromise_type', 'compromiso1')
                ->first();
        } else {
            $sessionData = session('guest_compromise1');
            $compromise = $sessionData ? (object)$sessionData : null;
        }

        // Si no hay datos, redirigir al formulario
        if (!$compromise) {
            return redirect('/compromiso1')->with('warning', 'Por favor completa el Compromiso 1 primero');
        }

        // Verificar que todas las 25 preguntas estén respondidas
        $answeredCount = 0;
        for ($i = 1; $i <= 25; $i++) {
            if (isset($compromise->{"pregunta_$i"}) && $compromise->{"pregunta_$i"} !== null) {
                $answeredCount++;
            }
        }

        // Si no todas las preguntas están respondidas, redirigir
        if ($answeredCount < 25) {
            return redirect('/compromiso1')->with('warning', 'Por favor completa todas las 25 preguntas del Compromiso 1');
        }

        // Mapeo de preguntas por sección con títulos exactos
        $secciones = [
            1 => ['nombre' => 'Calendarización: elaboración, difusión, seguimiento y prevención', 'preguntas' => [1, 2, 3, 4, 5]],
            2 => ['nombre' => 'Matrícula oportuna y sin condicionamientos (acceso y continuidad)', 'preguntas' => [6, 7, 8, 9, 10]],
            3 => ['nombre' => 'Asistencia y puntualidad: estudiantes y personal (tiempo lectivo y de gestión)', 'preguntas' => [11, 12, 13, 14, 15]],
            4 => ['nombre' => 'Entrega oportuna y uso de materiales y recursos educativos', 'preguntas' => [16, 17, 18, 19, 20]],
            5 => ['nombre' => 'Infraestructura, equipamiento y mobiliario: gestión y mantenimiento', 'preguntas' => [21, 22, 23, 24, 25]]
        ];

        // Analizar respuestas
        $analisis = [];
        $debilidades = [];
        $en_proceso = [];
        $fortalezas = [];
        $preguntasTexto = $this->obtenerTextosPreguntas();

        foreach ($secciones as $seccionId => $seccion) {
            $debilidades_seccion = [];
            $en_proceso_seccion = [];
            $fortalezas_seccion = [];
            $debilidades_count = 0;
            $en_proceso_count = 0;
            $fortalezas_count = 0;
            $total_seccion = 0;

            foreach ($seccion['preguntas'] as $pregunta_id) {
                $valor = $compromise->{"pregunta_$pregunta_id"};
                $total_seccion++;

                if ($valor == 1 || $valor == 2) {
                    // Es una debilidad (1=Nunca, 2=Rara vez)
                    $debilidades_count++;
                    $debilidades_seccion[] = [
                        'pregunta' => "Pregunta $pregunta_id",
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                    $debilidades[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                } elseif ($valor == 3) {
                    // En proceso (3=A veces)
                    $en_proceso_count++;
                    $en_proceso_seccion[] = [
                        'pregunta' => "Pregunta $pregunta_id",
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id"
                    ];
                    $en_proceso[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id"
                    ];
                } elseif ($valor == 4 || $valor == 5) {
                    // Son fortalezas (4=Casi siempre, 5=Siempre)
                    $fortalezas_count++;
                    $fortalezas_seccion[] = [
                        'pregunta' => "Pregunta $pregunta_id",
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                    $fortalezas[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                }
            }

            $analisis[$seccionId] = [
                'nombre' => $seccion['nombre'],
                'debilidades' => $debilidades_count,
                'en_proceso' => $en_proceso_count,
                'fortalezas' => $fortalezas_count,
                'total' => $total_seccion,
                'porcentaje_debilidades' => ($total_seccion > 0) ? round(($debilidades_count / $total_seccion) * 100, 1) : 0,
                'porcentaje_en_proceso' => ($total_seccion > 0) ? round(($en_proceso_count / $total_seccion) * 100, 1) : 0,
                'porcentaje_fortalezas' => ($total_seccion > 0) ? round(($fortalezas_count / $total_seccion) * 100, 1) : 0
            ];
        }

        return view('resumen-compromiso1', [
            'analisis' => $analisis,
            'debilidades' => $debilidades,
            'en_proceso' => $en_proceso,
            'fortalezas' => $fortalezas,
            'total_debilidades' => count($debilidades),
            'total_en_proceso' => count($en_proceso),
            'total_fortalezas' => count($fortalezas),
            'compromiso' => $compromise
        ]);
    }

    public function resumenCompromiso2()
    {
        // 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();
        }

        // Obtener datos del compromiso2 del usuario autenticado
        $compromiso2 = Compromiso2::where('user_id', $userId)
            ->where('compromise_type', 'compromiso2')
            ->first();

        // Si no hay datos, redirigir al formulario
        if (!$compromiso2) {
            return redirect('/compromiso2')->with('warning', 'Por favor completa el Compromiso 2 primero');
        }

        // Verificar que todas las 25 preguntas estén respondidas
        $answeredCount = 0;
        for ($i = 1; $i <= 25; $i++) {
            if ($compromiso2->{"pregunta_$i"} !== null) {
                $answeredCount++;
            }
        }

        // Si no todas las preguntas están respondidas, redirigir
        if ($answeredCount < 25) {
            return redirect('/compromiso2')->with('warning', 'Por favor completa todas las 25 preguntas del Compromiso 2');
        }

        // Mapeo de preguntas por sector (actualizado para compromiso2)
        $secciones = [
            1 => ['nombre' => 'Trabajo colegiado + acompañamiento pedagógico + involucramiento familiar', 'preguntas' => [1, 2, 3, 4, 5]],
            2 => ['nombre' => 'Monitoreo de la práctica pedagógica (rúbricas u otros instrumentos)', 'preguntas' => [6, 7, 8, 9, 10]],
            3 => ['nombre' => 'Estrategias para estudiantes en riesgo de interrumpir estudios', 'preguntas' => [11, 12, 13, 14, 15]],
            4 => ['nombre' => 'Desarrollo de competencias docentes y desarrollo profesional pedagógico', 'preguntas' => [16, 17, 18, 19, 20]],
            5 => ['nombre' => 'Participación democrática y relaciones interpersonales positivas', 'preguntas' => [21, 22, 23, 24, 25]]
        ];

        // Analizar respuestas
        $analisis = [];
        $debilidades = [];
        $en_proceso = [];
        $fortalezas = [];
        $preguntasTexto = [
            1 => 'Se analizan resultados de evaluaciones de estudiantes',
            2 => 'Se generan estrategias de mejora basadas en resultados',
            3 => 'Se comunican resultados a docentes y padres',
            4 => 'Se monitorea la implementación de mejoras',
            5 => 'Los resultados inciden en la planificación pedagógica',
            6 => 'Los estudiantes participan en espacios de toma de decisiones',
            7 => 'Se promueve el liderazgo estudiantil',
            8 => 'Existen canales para que estudiantes expresen sus opiniones',
            9 => 'Se actúa sobre las propuestas de estudiantes',
            10 => 'Estudiantes se sienten escuchados y valorados',
            11 => 'Se realizan ajustes curriculares para la diversidad',
            12 => 'Hay docentes de apoyo para estudiantes con dificultades',
            13 => 'Se promueve la inclusión de estudiantes con discapacidad',
            14 => 'Se atiende a estudiantes de diferentes ritmos de aprendizaje',
            15 => 'La IE promueve la interculturalidad',
            16 => 'Se realiza acompañamiento pedagógico a docentes',
            17 => 'Se analizan conjuntamente problemas pedagógicos',
            18 => 'Se realizan sesiones de desarrollo profesional',
            19 => 'Se monitorean los aprendizajes en aula',
            20 => 'El director retroalimenta a docentes sobre su práctica',
            21 => 'Se promueve un trato respetuoso entre miembros',
            22 => 'La IE actúa frente a situaciones de violencia',
            23 => 'Hay mecanismos de resolución de conflictos',
            24 => 'Se promueve la colaboración entre docentes',
            25 => 'Estudiantes y familias conocen canales para demandas'
        ];

        foreach ($secciones as $seccionId => $seccion) {
            $debilidades_count = 0;
            $en_proceso_count = 0;
            $fortalezas_count = 0;
            $total_seccion = 0;

            foreach ($seccion['preguntas'] as $pregunta_id) {
                $valor = $compromiso2->{"pregunta_$pregunta_id"};
                $total_seccion++;

                if ($valor == 1 || $valor == 2) {
                    $debilidades_count++;
                    $debilidades[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                } elseif ($valor == 3) {
                    $en_proceso_count++;
                    $en_proceso[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id"
                    ];
                } elseif ($valor == 4 || $valor == 5) {
                    $fortalezas_count++;
                    $fortalezas[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                }
            }

            $porcentaje_debilidades = $total_seccion > 0 ? round(($debilidades_count / $total_seccion) * 100, 1) : 0;
            $porcentaje_en_proceso = $total_seccion > 0 ? round(($en_proceso_count / $total_seccion) * 100, 1) : 0;
            $porcentaje_fortalezas = $total_seccion > 0 ? round(($fortalezas_count / $total_seccion) * 100, 1) : 0;

            $analisis[$seccionId] = [
                'nombre' => $seccion['nombre'],
                'debilidades' => $debilidades_count,
                'en_proceso' => $en_proceso_count,
                'fortalezas' => $fortalezas_count,
                'total' => $total_seccion,
                'porcentaje_debilidades' => $porcentaje_debilidades,
                'porcentaje_en_proceso' => $porcentaje_en_proceso,
                'porcentaje_fortalezas' => $porcentaje_fortalezas
            ];
        }

        return view('resumen-compromiso2', [
            'secciones' => $secciones,
            'analisis' => $analisis,
            'debilidades' => $debilidades,
            'en_proceso' => $en_proceso,
            'fortalezas' => $fortalezas,
            'total_debilidades' => count($debilidades),
            'total_en_proceso' => count($en_proceso),
            'total_fortalezas' => count($fortalezas),
            'compromiso2' => $compromiso2
        ]);
    }

    public function resumenCompromiso3()
    {
        // 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();
        }

        // Obtener datos del compromiso3 del usuario autenticado
        $compromiso3 = Compromiso3::where('user_id', $userId)
            ->where('compromise_type', 'compromiso3')
            ->first();

        // Si no hay datos, redirigir al formulario
        if (!$compromiso3) {
            return redirect('/compromiso3')->with('warning', 'Por favor completa el Compromiso 3 primero');
        }

        // Verificar que todas las 25 preguntas estén respondidas
        $answeredCount = 0;
        for ($i = 1; $i <= 25; $i++) {
            if ($compromiso3->{"pregunta_$i"} !== null) {
                $answeredCount++;
            }
        }

        // Si no todas las preguntas están respondidas, redirigir
        if ($answeredCount < 25) {
            return redirect('/compromiso3')->with('warning', 'Por favor completa todas las 25 preguntas del Compromiso 3');
        }

        // Mapeo de preguntas por sector (actualizado para compromiso3)
        $secciones = [
            1 => ['nombre' => 'Participación democrática y relaciones interpersonales positivas', 'preguntas' => [1, 2, 3, 4, 5]],
            2 => ['nombre' => 'Normas de convivencia: elaboración concertada y difusión', 'preguntas' => [6, 7, 8, 9, 10]],
            3 => ['nombre' => 'Prevención de la violencia con estudiantes, familias y personal', 'preguntas' => [11, 12, 13, 14, 15]],
            4 => ['nombre' => 'Red de protección para prevención y atención de violencia escolar', 'preguntas' => [16, 17, 18, 19, 20]],
            5 => ['nombre' => 'Educación Sexual Integral (ESI)', 'preguntas' => [21, 22, 23, 24, 25]]
        ];

        // Analizar respuestas
        $analisis = [];
        $debilidades = [];
        $en_proceso = [];
        $fortalezas = [];
        $preguntasTexto = [
            1 => 'Se gestiona adecuadamente el tiempo lectivo',
            2 => 'Se coordina la distribución de espacios',
            3 => 'Se implementan medidas para reducir pérdida de tiempo',
            4 => 'La jornada escolar se cumple efectivamente',
            5 => 'Se controla el absentismo del personal',
            6 => 'La IE cuenta con infraestructura de seguridad',
            7 => 'Se implementan protocolos de seguridad',
            8 => 'Se detectan y atienden riesgos sanitarios',
            9 => 'Se realiza mantenimiento preventivo',
            10 => 'El personal conoce protocolos de emergencia',
            11 => 'Se mantiene inventario actualizado de recursos',
            12 => 'Se controla recepción y distribución de materiales',
            13 => 'Se gestiona el presupuesto adecuadamente',
            14 => 'Se implementan medidas para uso eficiente de recursos',
            15 => 'Se rinde cuentas de los gastos educativos',
            16 => 'Hay comunicación fluida con padres de familia',
            17 => 'Se promueve la participación de padres en decisiones',
            18 => 'Se realizan actividades de integración comunitaria',
            19 => 'La comunidad participa en mejora de infraestructura',
            20 => 'Se implementan acuerdos de comunidad',
            21 => 'Se documenta adecuadamente la gestión',
            22 => 'Se cumple con normativas ministeriales',
            23 => 'Se realiza seguimiento a indicadores de calidad',
            24 => 'Se actualizan documentos de gestión',
            25 => 'La IE actúa con protocolos ante vulneración de derechos'
        ];

        foreach ($secciones as $seccionId => $seccion) {
            $debilidades_count = 0;
            $en_proceso_count = 0;
            $fortalezas_count = 0;
            $total_seccion = 0;

            foreach ($seccion['preguntas'] as $pregunta_id) {
                $valor = $compromiso3->{"pregunta_$pregunta_id"};
                $total_seccion++;

                if ($valor == 1 || $valor == 2) {
                    $debilidades_count++;
                    $debilidades[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                } elseif ($valor == 3) {
                    $en_proceso_count++;
                    $en_proceso[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id"
                    ];
                } elseif ($valor == 4 || $valor == 5) {
                    $fortalezas_count++;
                    $fortalezas[] = [
                        'seccion' => $seccion['nombre'],
                        'pregunta_id' => $pregunta_id,
                        'descripcion' => $preguntasTexto[$pregunta_id] ?? "Pregunta $pregunta_id",
                        'valor' => $valor
                    ];
                }
            }

            $porcentaje_debilidades = $total_seccion > 0 ? round(($debilidades_count / $total_seccion) * 100, 1) : 0;
            $porcentaje_en_proceso = $total_seccion > 0 ? round(($en_proceso_count / $total_seccion) * 100, 1) : 0;
            $porcentaje_fortalezas = $total_seccion > 0 ? round(($fortalezas_count / $total_seccion) * 100, 1) : 0;

            $analisis[$seccionId] = [
                'nombre' => $seccion['nombre'],
                'debilidades' => $debilidades_count,
                'en_proceso' => $en_proceso_count,
                'fortalezas' => $fortalezas_count,
                'total' => $total_seccion,
                'porcentaje_debilidades' => $porcentaje_debilidades,
                'porcentaje_en_proceso' => $porcentaje_en_proceso,
                'porcentaje_fortalezas' => $porcentaje_fortalezas
            ];
        }

        return view('resumen-compromiso3', [
            'secciones' => $secciones,
            'analisis' => $analisis,
            'debilidades' => $debilidades,
            'en_proceso' => $en_proceso,
            'fortalezas' => $fortalezas,
            'total_debilidades' => count($debilidades),
            'total_en_proceso' => count($en_proceso),
            'total_fortalezas' => count($fortalezas),
            'compromiso3' => $compromiso3
        ]);
    }

    private function obtenerTextosPreguntas()
    {
        return [
            1 => 'El director/a lidera y orienta la formulación, difusión e implementación del PEI y la mejora continua.',
            2 => 'Se realiza monitoreo y asesoramiento a docentes sobre procesos pedagógicos y de evaluación.',
            3 => 'Se evalúa el desempeño del personal y se implementan acciones de mejora.',
            4 => 'Se promueve un ambiente seguro, acogedor y colaborativo.',
            5 => 'Se gestionan conflictos y se toman decisiones de forma participativa.',
            6 => 'Se organiza la distribución del tiempo de forma que se cumplan las horas lectivas.',
            7 => 'Existe coordinación entre grados/áreas para actividades pedagógicas.',
            8 => 'Se controla y registra la asistencia y puntualidad del personal.',
            9 => 'La IE implementa medidas para reducir la pérdida de tiempo lectivo.',
            10 => 'La jornada escolar se cumple con inicio y cierre efectivos.',
            11 => 'Los materiales educativos son suficientes para el periodo lectivo.',
            12 => 'Existe un control de recepción, registro y distribución de materiales.',
            13 => 'Los docentes promueven el uso pedagógico de los materiales.',
            14 => 'Cuando faltan materiales, la IE activa alternativas viables.',
            15 => 'Se prioriza el uso de recursos considerando la diversidad del estudiantado.',
            16 => 'La IE cuenta con un inventario actualizado de infraestructura.',
            17 => 'Se ejecuta mantenimiento preventivo de servicios básicos.',
            18 => 'El mobiliario es suficiente y funcional para la matrícula.',
            19 => 'Los ambientes cumplen condiciones mínimas de seguridad.',
            20 => 'Cuando se detecta una necesidad crítica, se actúa con priorización.',
            21 => 'El director/a lidera y orienta la formulación del PEI.',
            22 => 'Se realiza monitoreo a docentes sobre procesos pedagógicos.',
            23 => 'Se evalúa el desempeño del personal.',
            24 => 'Se promueve un ambiente seguro.',
            25 => 'Se gestionan conflictos de forma participativa.'
        ];
    }
    // ===== Métodos para Ver Resumen sin header/footer (Layout en blanco) =====

    public function verResumenCompromiso1()
    {
        // Obtener datos del compromiso1 del usuario autenticado
        $compromise = Compromise::where('user_id', Auth::id())
            ->where('compromise_type', 'compromiso1')
            ->first();

        // Si no hay datos, redirigir al formulario
        if (!$compromise) {
            return redirect('/compromiso1')->with('warning', 'Por favor completa el Compromiso 1 primero');
        }

        // Verificar que todas las 25 preguntas estén respondidas
        $answeredCount = 0;
        for ($i = 1; $i <= 25; $i++) {
            if ($compromise->{"pregunta_$i"} !== null) {
                $answeredCount++;
            }
        }

        // Si no todas las preguntas están respondidas, redirigir
        if ($answeredCount < 25) {
            return redirect('/compromiso1')->with('warning', 'Por favor completa todas las 25 preguntas del Compromiso 1');
        }

        // Obtener análisis usando el método del mismo controller
        $method = new \ReflectionMethod($this, 'resumenCompromiso1');
        $result = $this->resumenCompromiso1();
        
        // Si es una redirección, devolverla
        if ($result instanceof \Illuminate\Http\RedirectResponse) {
            return $result;
        }

        // Extaer datos de la vista
        $viewData = $result->getData();
        
        // Renderizar con layout blank
        return view('resumen-compromiso1', $viewData);
    }

    public function verResumenCompromiso2()
    {
        // Obtener datos del compromiso2 del usuario autenticado
        $compromiso2 = Compromiso2::where('user_id', Auth::id())
            ->where('compromise_type', 'compromiso2')
            ->first();

        // Si no hay datos, redirigir al formulario
        if (!$compromiso2) {
            return redirect('/compromiso2')->with('warning', 'Por favor completa el Compromiso 2 primero');
        }

        // Verificar que todas las 25 preguntas estén respondidas
        $answeredCount = 0;
        for ($i = 1; $i <= 25; $i++) {
            if ($compromiso2->{"pregunta_$i"} !== null) {
                $answeredCount++;
            }
        }

        // Si no todas las preguntas están respondidas, redirigir
        if ($answeredCount < 25) {
            return redirect('/compromiso2')->with('warning', 'Por favor completa todas las 25 preguntas del Compromiso 2');
        }

        // Obtener análisis
        $result = $this->resumenCompromiso2();
        
        if ($result instanceof \Illuminate\Http\RedirectResponse) {
            return $result;
        }

        $viewData = $result->getData();
        return view('resumen-compromiso2', $viewData);
    }

    public function verResumenCompromiso3()
    {
        // Obtener datos del compromiso3 del usuario autenticado
        $compromiso3 = Compromiso3::where('user_id', Auth::id())
            ->where('compromise_type', 'compromiso3')
            ->first();

        // Si no hay datos, redirigir al formulario
        if (!$compromiso3) {
            return redirect('/compromiso3')->with('warning', 'Por favor completa el Compromiso 3 primero');
        }

        // Verificar que todas las 25 preguntas estén respondidas
        $answeredCount = 0;
        for ($i = 1; $i <= 25; $i++) {
            if ($compromiso3->{"pregunta_$i"} !== null) {
                $answeredCount++;
            }
        }

        // Si no todas las preguntas están respondidas, redirigir
        if ($answeredCount < 25) {
            return redirect('/compromiso3')->with('warning', 'Por favor completa todas las 25 preguntas del Compromiso 3');
        }

        // Obtener análisis
        $result = $this->resumenCompromiso3();
        
        if ($result instanceof \Illuminate\Http\RedirectResponse) {
            return $result;
        }

        $viewData = $result->getData();
        return view('resumen-compromiso3', $viewData);
    }}

