<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Models\Departamento;
use App\Models\Municipio;
use App\Models\Sede;
use App\Models\Prestador;
use App\Models\Formulario;
class HomeController extends Controller
{
    // Carga inicial: solo departamentos
    public function index()
    {
        $departamentos = Departamento::orderBy('departamento')->get([
            'id_departamento as id', 'departamento as nombre'
        ]);

        $formularios = Formulario::orderByDesc('created_at')
            ->limit(50)
            ->get();

        return view('home', compact('departamentos', 'formularios'));
    }

    // Lista carpetas/archivos HTML generados en storage/public/formularios
    public function htmlSnapshots()
    {
        $disk = Storage::disk('public');
        $base = 'formularios';
        $dirs = $disk->exists($base) ? $disk->directories($base) : [];

        $items = [];
        foreach ($dirs as $dir) {
            $folder = basename($dir);
            $files = collect($disk->files($dir))
                ->filter(fn($f) => str_ends_with(strtolower($f), '.html'))
                ->sort()
                ->values()
                ->all();
            $items[] = [
                'folder' => $folder,
                'path'   => $dir,
                'files'  => $files,
            ];
        }

        // Ordenar por nombre de carpeta
        usort($items, fn($a,$b) => strcmp($a['folder'], $b['folder']));

        return view('snapshots.index', [ 'items' => $items ]);
    }

    // HomeController.php


public function nits(Request $request)
{
    $request->validate([
        'q'     => ['required','string','min:3'],
        'limit' => ['nullable','integer','min:1','max:50'],
    ], [
        'q.min' => 'Escribe al menos 3 caracteres.'
    ]);

    $q     = trim($request->q);
    $limit = $request->integer('limit', 20);

    $rows = Sede::query()
        ->where(function($qq) use ($q) {
            $qq->whereRaw('LTRIM(RTRIM(nit)) LIKE ?', [$q.'%'])
               ->orWhereRaw('LTRIM(RTRIM(nombre_prestador)) LIKE ?', ['%'.$q.'%']);
        })
        ->selectRaw('LTRIM(RTRIM(nit)) as nit, MAX(LTRIM(RTRIM(nombre_prestador))) as nombre_prestador')
        ->groupBy('nit')
        ->orderBy('nit')
        ->limit($limit)
        ->get();

    $items = $rows->map(fn($r) => [
        'nit'   => (string)$r->nit,
        'label' => "{$r->nit} - {$r->nombre_prestador}",
    ])->values();

    return response()->json([
        'items'   => $items,
        'message' => $items->isEmpty() ? 'Sin coincidencias.' : 'Resultados:'
    ]);
}


public function sedesPorNit(Request $request)
{
    $request->validate([
        'nit' => ['required','string'],
    ]);

    $nit = trim($request->nit);

    $rows = Sede::query()
        ->whereRaw('LTRIM(RTRIM(nit)) = ?', [$nit])
        ->selectRaw('LTRIM(RTRIM(cod_municipio)) as municipio_id')
        ->groupBy('cod_municipio')
        ->orderBy('municipio_id')
        ->get()
        ->map(fn($r) => [
            'municipio_id'     => (string)$r->municipio_id,
            'municipio_nombre' => (string)$r->municipio_id, // mismo valor como texto
        ])
        ->values();

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



public function buscarSede(Request $request)
{
    // acepta municipio_id o municipio
    $request->validate([
        'nit' => ['required','string'],
        // que venga al menos uno:
        // si no llega ninguno, forzamos error manual abajo
    ]);

    $nit = trim($request->input('nit',''));

    // Unifica el nombre del campo
    $mun = trim($request->input('municipio_id',
                 $request->input('municipio', '')));

    if ($mun === '') {
        return back()->withErrors(['municipio_id' => 'Falta municipio/sede.'])->withInput();
    }

    // Busca la sede directamente para obtener más datos (incluido tipo_red)
    $sede = Sede::whereRaw('LTRIM(RTRIM(cod_municipio)) = ?', [$mun])
        ->whereRaw('LTRIM(RTRIM(nit)) = ?', [$nit])
        ->first();

    if (!$sede) {
        return back()->withErrors(['nit' => 'No se encontraron sedes con esa combinación (NIT + municipio).'])
                     ->withInput();
    }

    $municipio = Municipio::whereRaw('LTRIM(RTRIM(id_municipio)) = ?', [$mun])
        ->first(['id_municipio','municipio','departamento_id']);
    $departamento = $municipio
        ? Departamento::whereRaw('LTRIM(RTRIM(id_departamento)) = ?', [$municipio->departamento_id])
            ->first(['id_departamento','departamento'])
        : null;

    $prest = Prestador::whereRaw('LTRIM(RTRIM(nit)) = ?', [$nit])->first();

    // tipo_formulario opcional (0/1/2)
    $tipo = (int)$request->input('tipo_formulario', 0);

    session([
        'seleccion_sede' => [
            'departamento_id' => $departamento?->id_departamento ?? $municipio?->departamento_id,
            'departamento'    => trim($departamento->departamento ?? ''),
            'municipio_id'    => $municipio?->id_municipio ?? $mun,
            'municipio'       => trim($municipio->municipio ?? ''),
            'nit'             => $nit,
            'trimestre'       => $prest?->trimestre,
            'prestador'       => $sede->nombre_prestador,
            'tipo_formulario' => $tipo, // 0/1/2
            'tipo_red'        => $sede->tipo_red,
            'complejidad'     => $sede->complejidad,
        ]
    ]);

    return redirect()->route('formularios.create')
                     ->with('status','Sede encontrada. Completa el formulario.');
}





}
