<?php

namespace App\Http\Controllers;

use App\Models\Pregunta;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class PreguntaController extends Controller
{
    public function index(Request $request)
    {
        $lecturaId = $request->input('lectura_id');

        $query = Pregunta::with(['lectura', 'opciones']);

        if ($lecturaId) {
            $query->where('lectura_id', $lecturaId);
        }

        return response()->json($query->latest()->get(), 200);
    }

    public function show($id)
    {
        $pregunta = Pregunta::with(['lectura', 'opciones'])->find($id);

        if (!$pregunta) {
            return response()->json(['message' => 'Pregunta no encontrada.'], 404);
        }

        return response()->json($pregunta, 200);
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'lectura_id' => 'required|exists:lecturas,id',
            'enunciado' => 'required|string',
            'tipo' => 'required|in:literal,inferencial,critica',
            'formato' => 'required|in:opcion_multiple,abierta',
            'puntaje' => 'required|numeric|min:1',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'message' => 'Revise los datos ingresados.',
                'errors' => $validator->errors()
            ], 422);
        }

        $pregunta = Pregunta::create([
            'lectura_id' => $request->lectura_id,
            'enunciado' => $request->enunciado,
            'tipo' => $request->tipo,
            'formato' => $request->formato,
            'puntaje' => $request->puntaje,
            'estado' => true,
        ]);

        return response()->json([
            'message' => 'Pregunta registrada correctamente.',
            'success' => true,
            'element' => $pregunta->load('opciones')
        ], 201);
    }

    public function update(Request $request, $id)
    {
        $pregunta = Pregunta::find($id);

        if (!$pregunta) {
            return response()->json(['message' => 'Pregunta no encontrada.'], 404);
        }

        $validator = Validator::make($request->all(), [
            'lectura_id' => 'required|exists:lecturas,id',
            'enunciado' => 'required|string',
            'tipo' => 'required|in:literal,inferencial,critica',
            'formato' => 'required|in:opcion_multiple,abierta',
            'puntaje' => 'required|numeric|min:1',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'message' => 'Revise los datos ingresados.',
                'errors' => $validator->errors()
            ], 422);
        }

        $pregunta->update($request->only([
            'lectura_id',
            'enunciado',
            'tipo',
            'formato',
            'puntaje',
        ]));

        return response()->json([
            'message' => 'Pregunta actualizada correctamente.',
            'success' => true,
            'element' => $pregunta->load('opciones')
        ], 200);
    }

    public function destroy($id)
    {
        $pregunta = Pregunta::find($id);

        if (!$pregunta) {
            return response()->json(['message' => 'Pregunta no encontrada.'], 404);
        }

        $pregunta->delete();

        return response()->json([
            'message' => 'Pregunta eliminada correctamente.',
            'success' => true
        ], 200);
    }
}
