<?php

// app/Http/Controllers/FormController.php

namespace App\Http\Controllers;

use App\Models\Form;
use App\Models\FormResponse;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\DB;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Log;  // <-- Importa Log
class RespuestasController extends Controller
{

public function recibirRespuesta(Request $request)
{
    try {
        $validated = $request->validate([
            'form_id' => 'required|integer|exists:forms,id',
            'usuarioRegistro' => 'required|string|exists:usuarios,idUsuario',
            'contenido_json' => 'required|json',
        ]);

        $usuarioLogueado = $validated['usuarioRegistro'];

        $formId = DB::table('respuestas_formulario')->insertGetId([
            'form_id' => $validated['form_id'],
            'id_usuario' => $usuarioLogueado,
            'contenido_json' => $validated['contenido_json'],
            'created_at' => now()
        ]);

        return response()->json([
            'success' => true,
            'message' => 'Respuesta guardada correctamente',
            'id' => $formId
        ]);
    } catch (\Exception $e) {
        return response()->json([
            'success' => false,
            'message' => 'Error interno del servidor',
            'error' => $e->getMessage()
        ], 500);
    }
}

public function tieneRespuesta(Request $request)
{
    $request->validate([
        'form_id' => 'required|integer|exists:forms,id',
        'usuario_id' => 'required|string',
    ]);

    $formId = $request->input('form_id');
    $usuarioId = $request->input('usuario_id');

    $existe = DB::table('respuestas_formulario')
        ->where('form_id', $formId)
        ->where('id_usuario', $usuarioId)
        ->exists();

    return response()->json([
        'success' => true,
        'hasRespuesta' => $existe
    ]);
}



 public function generarPDF($id_usuario, $form_id)
{
    try {
        $respuesta = DB::table('respuestas_formulario')
            ->where('id_usuario', $id_usuario)
            ->where('form_id', $form_id)
            ->first();

        if (!$respuesta) {
            return response()->json(['error' => 'No hay respuesta registrada para ese usuario y formulario'], 404);
        }

        $contenido = json_decode($respuesta->contenido_json, true);
        $tabs = $contenido['tabs'];

        // Formatear las claves
        $tabsFormateados = [];
        foreach ($tabs as $tituloTab => $campos) {
            $camposFormateados = [];
            foreach ($campos as $clave => $valor) {
                $claveFormateada = ucwords(str_replace('_', ' ', $clave));
                $camposFormateados[$claveFormateada] = $valor;
            }
            $tabsFormateados[$tituloTab] = $camposFormateados;
        }

        $pdf = PDF::loadView('respuesta', [
            'respuesta' => $tabsFormateados,
            'usuario' => $respuesta->id_usuario,
            'fecha' => $respuesta->created_at
        ]);

        return $pdf->download("respuesta_{$id_usuario}_form_{$form_id}.pdf");

    } catch (\Exception $e) {
        Log::error('Error generando PDF para usuario ' . $id_usuario . ' y formulario ' . $form_id . ': ' . $e->getMessage(), [
            'exception' => $e,
        ]);

        return response()->json([
            'error' => 'Error al generar el PDF',
            'message' => $e->getMessage()
        ], 500);
    }
}




public function obtenerRespuesta(Request $request)
{
    $request->validate([
        'form_id' => 'required|integer',
        'usuario_id' => 'required|string'
    ]);

    $respuesta = DB::table('respuestas_formulario')
        ->where('form_id', $request->form_id)
        ->where('id_usuario', $request->usuario_id)
        ->first();

    if ($respuesta) {
        return response()->json([
            'success' => true,
            'respuesta' => json_decode($respuesta->contenido_json, true)
        ]);
    } else {
        return response()->json([
            'success' => false,
            'message' => 'No se encontró respuesta'
        ], 404);
    }
}
public function actualizarRespuesta(Request $request)
{
    try {
        $validated = $request->validate([
            'form_id' => 'required|integer|exists:forms,id',
            'usuarioRegistro' => 'required|string|exists:usuarios,idUsuario',
            'contenido_json' => 'required|json',
        ]);

        $formId = $validated['form_id'];
        $usuario = $validated['usuarioRegistro'];
        $contenido = $validated['contenido_json'];

        // Buscar la respuesta existente
        $respuestaExistente = DB::table('respuestas_formulario')
            ->where('form_id', $formId)
            ->where('id_usuario', $usuario)
            ->first();

        if (!$respuestaExistente) {
            return response()->json([
                'success' => false,
                'message' => 'No existe una respuesta previa para actualizar.'
            ], 404);
        }

        // Actualizar la respuesta
        DB::table('respuestas_formulario')
            ->where('form_id', $formId)
            ->where('id_usuario', $usuario)
            ->update([
                'contenido_json' => $contenido,
                'updated_at' => now()
            ]);

        return response()->json([
            'success' => true,
            'message' => 'Respuesta actualizada correctamente'
        ]);

    } catch (\Exception $e) {
        return response()->json([
            'success' => false,
            'message' => 'Error interno del servidor',
            'error' => $e->getMessage()
        ], 500);
    }
}



}
