<?php

namespace App\Http\Controllers;

use App\Models\Capa;
use App\Models\Proyecto;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class CapaController extends Controller
{
    public function store(Request $request, Proyecto $proyecto)
    {
        $request->validate([
            'nombre' => ['required', 'string', 'max:255'],
            'archivo' => ['required', 'file', 'mimes:kml,xml,kmz', 'max:10'],
        ]);

        $archivo = $request->file('archivo');

        $extension = strtolower($archivo->getClientOriginalExtension());

        $ruta = $archivo->store('capas', 'public');

        Capa::create([
            'proyecto_id' => $proyecto->id,
            'nombre' => $request->nombre,
            'archivo' => $ruta,
            'tipo' => $extension,
            'visible' => true,
        ]);

        return back()->with('success', 'Capa cargada correctamente.');
    }

    public function listadoJson(Proyecto $proyecto)
    {
        $capas = Capa::where('proyecto_id', $proyecto->id)
            ->where('visible', true)
            ->orderBy('created_at', 'desc')
            ->get()
            ->map(function ($capa) {
                return [
                    'id' => $capa->id,
                    'nombre' => $capa->nombre,
                    'tipo' => strtolower($capa->tipo),
                    'archivo' => $capa->archivo,
                    'url' => Storage::url($capa->archivo),
                    'delete_url' => route('capas.destroy', $capa),
                ];
            });

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

    public function destroy(Capa $capa)
    {
        if ($capa->archivo && Storage::disk('public')->exists($capa->archivo)) {
            Storage::disk('public')->delete($capa->archivo);
        }

        $capa->delete();

        return response()->json([
            'message' => 'Capa eliminada correctamente.',
        ]);
    }
}
