<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Models\Caso;
use Illuminate\Http\Request;

class CasoAPIController extends Controller
{
    public function index(Request $request)
    {
        $query = Caso::with(['cliente', 'vehiculo', 'aseguradora']);

        if ($request->estado) {
            $query->where('estado_actual', $request->estado);
        }

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

    public function store(Request $request)
    {
        $validated = $request->validate([
            'fecha_siniestro' => 'required|date',
            'cobertura' => 'required|in:DP,RC',
        ]);

        $caso = Caso::create($validated);

        return response()->json($caso, 201);
    }

    public function show(Caso $caso)
    {
        return response()->json($caso->load(['cliente', 'vehiculo', 'aseguradora', 'broker', 'taller']));
    }

    public function update(Request $request, Caso $caso)
    {
        $validated = $request->validate([
            'estado_actual' => 'string',
            'observaciones' => 'nullable|string',
        ]);

        $caso->update($validated);

        return response()->json($caso);
    }

    public function destroy(Caso $caso)
    {
        $caso->delete();

        return response()->json(null, 204);
    }

    // API Externa para Aseguradora (Solo Lectura)
    public function timeline(Caso $caso)
    {
        $timeline = $caso->estadosHistoricos()
            ->orderBy('fecha_ingreso', 'asc')
            ->get()
            ->map(function ($estado) {
                return [
                    'estado' => $estado->estado,
                    'fecha_inicio' => $estado->fecha_ingreso,
                    'fecha_fin' => $estado->fecha_salida,
                    'duracion_minutos' => $estado->duracion_minutas,
                    'nota' => $estado->nota,
                ];
            });

        return response()->json([
            'caso' => $caso->numero_reclamo,
            'vehiculo' => $caso->vehiculo->placa,
            'timeline' => $timeline,
        ]);
    }

    public function fotos(Caso $caso)
    {
        return response()->json([
            'caso' => $caso->numero_reclamo,
            'link_fotos' => $caso->link_fotos,
        ]);
    }

    public function informe(Caso $caso)
    {
        return response()->json([
            'caso' => $caso->numero_reclamo,
            'link_informe' => $caso->link_informe,
            'estado' => $caso->estado_actual,
            'cobertura' => $caso->cobertura,
        ]);
    }
}
