<?php

use App\Http\Controllers\AjusteController;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\AutorizacionController;
use App\Http\Controllers\ClienteController;
use App\Http\Controllers\ContratoController;
use App\Http\Controllers\ContratoReporteController;
use App\Http\Controllers\DevolucionController;
use App\Http\Controllers\DistritoController;
use App\Http\Controllers\ExtractoController;
use App\Http\Controllers\FechaTcController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\LoteController;
use App\Http\Controllers\NotaController;
use App\Http\Controllers\PagoTramiteController;
use App\Http\Controllers\ReciboController;
use App\Http\Controllers\TramiteController;
use App\Http\Controllers\UrbanizacionController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CobradorVendedorController;
use App\Http\Controllers\SeguimientoController;
use App\Http\Controllers\BackupController;
use App\Http\Controllers\UsuarioController;
use App\Http\Controllers\ReporteController;
use App\Http\Controllers\NotificacionController;
use App\Http\Controllers\PerfilController;
use App\Http\Controllers\DashboardController;

// Raíz → redirige al login
Route::get('/', function () {
    // return redirect()->route('login');
    return view('welcome');
});

// Auth
Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login');
Route::post('/login', [LoginController::class, 'login']);
Route::post('/logout', [LoginController::class, 'logout'])->name('logout');

// Rutas protegidas
Route::middleware('auth')->group(function () {

// En web.php
Route::get('/dashboard',          [DashboardController::class, 'principal'])->name('dashboard');
Route::get('/dashboard/reportes', [DashboardController::class, 'reportes'])->name('dashboard.reportes');
Route::get('/dashboard/tramites', [DashboardController::class, 'tramites'])->name('dashboard.tramites');
Route::get('/dashboard/gestion',  [DashboardController::class, 'gestion'])->name('dashboard.gestion');
    // Fecha y tipo de cambio (primera pantalla tras login)
    Route::get('/fecha-tc', [FechaTcController::class, 'index'])->name('fecha-tc');
    Route::post('/fecha-tc', [FechaTcController::class, 'store'])->name('fecha-tc.store');
    Route::get('/get-tc', [FechaTcController::class, 'getTc'])->name('get-tc');

    //perfil   
    Route::get('/perfil',            [PerfilController::class, 'index'])->name('perfil.index');
    Route::get('/perfil/password',   [PerfilController::class, 'editPassword'])->name('perfil.password');
    Route::put('/perfil/password',   [PerfilController::class, 'updatePassword'])->name('perfil.password.update');

    // Urbanizaciones
    Route::resource('urbanizaciones', UrbanizacionController::class)->except(['destroy']);
    Route::get('urbanizaciones/{id}/confirmar-eliminar',      [UrbanizacionController::class, 'confirmDelete'])->name('urbanizaciones.confirm-delete');
    Route::delete('urbanizaciones/{id}',        [UrbanizacionController::class, 'destroy'])->name('urbanizaciones.destroy');

    // Distritos
    Route::resource('distritos', DistritoController::class);

    // Clientes
    Route::get('/clientes', [ClienteController::class, 'index'])->name('clientes.index');
    Route::get('/clientes/create', [ClienteController::class, 'create'])->name('clientes.create');
    Route::post('/clientes/store-tmp', [ClienteController::class, 'storeTmp'])->name('clientes.store-tmp');
    Route::post('/clientes/destroy-tmp', [ClienteController::class, 'destroyTmp'])->name('clientes.destroy-tmp');
    Route::post('/clientes/confirmar-grupo', [ClienteController::class, 'confirmarGrupo'])->name('clientes.confirmar-grupo');
    Route::get('/clientes/comprobar', [ClienteController::class, 'comprobar'])->name('clientes.comprobar');
    Route::get('/clientes/{id}', [ClienteController::class, 'show'])->name('clientes.show');
    Route::get('/clientes/{id}/edit', [ClienteController::class, 'edit'])->name('clientes.edit');
    Route::put('/clientes/{id}', [ClienteController::class, 'update'])->name('clientes.update');

    // Dashboard principal
    Route::get('/dashboard', [HomeController::class, 'index'])->name('dashboard');
    Route::resource('lotes', LoteController::class);

    // AJAX selects en cascada
    Route::get('/lotes/distritos/{id}', [LoteController::class, 'getDistritos'])->name('lotes.distritos');
    Route::get('/lotes/manzanos/{id}', [LoteController::class, 'getManzanos'])->name('lotes.manzanos');

    // Contratos
    Route::get('/contratos/lotes-disponibles/{id}', [ContratoController::class, 'getLotesDisponibles']);
    Route::get('/contratos/datos-lote/{id}', [ContratoController::class, 'getDatosLote']);
    Route::get('/contratos/buscar-cliente', [ContratoController::class, 'buscarCliente']);

    Route::get('/contratos', [ContratoController::class, 'index'])->name('contratos.index');
    Route::get('/contratos/create', [ContratoController::class, 'create'])->name('contratos.create');
    Route::post('/contratos', [ContratoController::class, 'store'])->name('contratos.store');
    Route::get('/contratos/{id}', [ContratoController::class, 'show'])->name('contratos.show');

    // PDFs (pendiente)
    Route::get('/contratos/{id}/pdf', [ContratoReporteController::class, 'contratoPdf'])->name('contratos.pdf');
    Route::get('/contratos/{id}/registro-pdf',  [ContratoReporteController::class, 'registroPdf'])->name('contratos.registro-pdf');

    // Devolución de lotes (pendiente)
    Route::get('/devoluciones', [DevolucionController::class, 'index'])->name('devoluciones.index');
    Route::get('/devoluciones/{id}', [DevolucionController::class, 'show'])->name('devoluciones.show');
    Route::delete('/devoluciones/{id}', [DevolucionController::class, 'destroy'])->name('devoluciones.destroy');

    // // Recibos (pendiente)
    Route::get('/recibos/saldos', [ReciboController::class, 'getSaldos'])->name('recibos.saldos');
    Route::get('/recibos/tipo-cambio', [ReciboController::class, 'getTipoCambio'])->name('recibos.tc');
    Route::get('/recibos/buscar-clientes', [ReciboController::class, 'buscarClientesRecibo'])->name('recibos.buscar-clientes');
    // Route::get('/recibos/contratos-cliente/{id}', [ReciboController::class, 'getContratosCliente']);
    Route::get('/recibos/contratos-cliente/{id}', [ReciboController::class, 'getContratosCliente'])->name('recibos.contratos-cliente');

    Route::get('/recibos', [ReciboController::class, 'index'])->name('recibos.index');
    Route::get('/recibos/create', [ReciboController::class, 'create'])->name('recibos.create');
    Route::post('/recibos', [ReciboController::class, 'store'])->name('recibos.store');
    Route::get('/recibos/{id}', [ReciboController::class, 'show'])->name('recibos.show');
    Route::post('/recibos/{id}/anular', [ReciboController::class, 'anular'])->name('recibos.anular');
    Route::get('/recibos/{id}/pdf', [ReciboController::class, 'pdf'])->name('recibos.pdf');

    // ajustes (pendiente)
    Route::get('/ajustes/contratos-cliente/{id}', [AjusteController::class, 'getContratosCliente']);

    Route::get('/ajustes', [AjusteController::class, 'index'])->name('ajustes.index');
    Route::get('/ajustes/create', [AjusteController::class, 'create'])->name('ajustes.create');
    Route::post('/ajustes', [AjusteController::class, 'store'])->name('ajustes.store');
    Route::get('/ajustes/{id}', [AjusteController::class, 'show'])->name('ajustes.show');
    // Route::get('/ajustes/{id}/pdf', fn ($id) => 'PDF pendiente')->name('ajustes.pdf');
    Route::get('/ajustes/{id}/pdf', [AjusteController::class, 'ajustePdf'])->name('ajustes.pdf');

    Route::get('/extractos', [ExtractoController::class, 'index'])->name('extractos.index');
    Route::get('/extractos/{id}', [ExtractoController::class, 'show'])->name('extractos.show');
    Route::get('/extractos/{id}/pdf', [ExtractoController::class, 'pdf'])->name('extractos.pdf');
    // Route::get('/extractos',                          [ExtractoController::class, 'index'])->name('extractos.index');
    // Route::get('/extractos/buscar-clientes',          [ExtractoController::class, 'buscarClientes'])->name('extractos.buscar-clientes');
    // Route::get('/extractos/{idcliente}',              [ExtractoController::class, 'show'])->name('extractos.show');

    // Autorizaciones — AJAX ANTES
    Route::get('/autorizaciones/lotes-disponibles/{id}', [AutorizacionController::class, 'getLotesDisponibles']);
    Route::get('/autorizaciones/datos-lote/{id}', [AutorizacionController::class, 'getDatosLote']);

    Route::get('/autorizaciones', [AutorizacionController::class, 'index'])->name('autorizaciones.index');
    Route::get('/autorizaciones/create', [AutorizacionController::class, 'create'])->name('autorizaciones.create');
    Route::post('/autorizaciones', [AutorizacionController::class, 'store'])->name('autorizaciones.store');
    
    Route::post('/autorizaciones/{id}/anular', [AutorizacionController::class, 'anular'])->name('autorizaciones.anular');
    Route::get('/autorizaciones/{id}/pdf', [AutorizacionController::class, 'pdf'])->name('autorizaciones.pdf');
    Route::get('/autorizaciones/{id}', [AutorizacionController::class, 'show'])->name('autorizaciones.show');

    // Notas — AJAX ANTES
    Route::get('/notas/lotes-en-tramite/{id}', [NotaController::class, 'getLotesEnTramite']);
    Route::get('/notas/datos-lote/{id}', [NotaController::class, 'getDatosLote']);

    Route::get('/notas', [NotaController::class, 'index'])->name('notas.index');
    Route::get('/notas/create', [NotaController::class, 'create'])->name('notas.create');
    Route::post('/notas', [NotaController::class, 'store'])->name('notas.store');
  
    Route::post('/notas/{id}/anular', [NotaController::class, 'anular'])->name('notas.anular');
    Route::get('/notas/{id}/pdf',      [NotaController::class, 'pdf'])->name('notas.pdf');
      Route::get('/notas/{id}', [NotaController::class, 'show'])->name('notas.show');

    // ── RUTAS — AJAX primero, luego resource ──
    Route::get('/tramites/distritos/{id}', [TramiteController::class, 'getDistritos'])->name('tramites.distritos');
    Route::get('/tramites/manzanos/{id}', [TramiteController::class, 'getManzanos'])->name('tramites.manzanos');

    Route::get('/tramites', [TramiteController::class, 'index'])->name('tramites.index');
    Route::get('/tramites/{id}', [TramiteController::class, 'show'])->name('tramites.show');
    Route::get('/tramites/{id}/edit', [TramiteController::class, 'edit'])->name('tramites.edit');
    Route::put('/tramites/{id}', [TramiteController::class, 'update'])->name('tramites.update');

    // ── RUTAS — AJAX primero, luego resource ──
    Route::get('/pagos-tramites/distritos/{id}', [PagoTramiteController::class, 'getDistritos']);
    Route::get('/pagos-tramites/manzanos/{id}', [PagoTramiteController::class, 'getManzanos']);

    Route::get('/pagos-tramites', [PagoTramiteController::class, 'index'])->name('pagos-tramites.index');
    Route::get('/pagos-tramites/create', [PagoTramiteController::class, 'create'])->name('pagos-tramites.create');
    Route::post('/pagos-tramites', [PagoTramiteController::class, 'store'])->name('pagos-tramites.store');
    Route::get('/pagos-tramites/{id}', [PagoTramiteController::class, 'show'])->name('pagos-tramites.show');
    Route::patch('/pagos-tramites/{id}/anular', [PagoTramiteController::class, 'anular'])->name('pagos-tramites.anular');
    Route::get('/pagos-tramites/{id}/pdf', [PagoTramiteController::class, 'pdf'])->name('pagos-tramites.pdf');

    // cobradores y vendedores (pendiente)
    Route::get('/cobradores-vendedores/comprobar-ci', [CobradorVendedorController::class, 'comprobarCi'])->name('cobradores-vendedores.comprobar-ci'); 
    Route::get('/cobradores-vendedores',  [CobradorVendedorController::class, 'index'])->name('cobradores-vendedores.index');
    Route::get('/cobradores-vendedores/create', [CobradorVendedorController::class, 'create'])->name('cobradores-vendedores.create');
    Route::post('/cobradores-vendedores',  [CobradorVendedorController::class, 'store'])->name('cobradores-vendedores.store');
    Route::get('/cobradores-vendedores/{id}', [CobradorVendedorController::class, 'show'])->name('cobradores-vendedores.show');
    Route::get('/cobradores-vendedores/{id}/edit', [CobradorVendedorController::class, 'edit'])->name('cobradores-vendedores.edit'); 
    Route::put('/cobradores-vendedores/{id}',  [CobradorVendedorController::class, 'update'])->name('cobradores-vendedores.update'); 
    Route::delete('/cobradores-vendedores/{id}', [CobradorVendedorController::class, 'destroy'])->name('cobradores-vendedores.destroy');

    // seguimiento (pendiente)
    Route::get('/seguimiento', [SeguimientoController::class, 'index'])->name('seguimiento.index');

    // Backup (pendiente)
    Route::get('/backup',                        [BackupController::class, 'index'])->name('backup.index');
    Route::get('/backup/autorizaciones',         [BackupController::class, 'descargarAutorizaciones'])->name('backup.autorizaciones');
    Route::post('/backup/descargar',             [BackupController::class, 'descargar'])->name('backup.descargar');
    Route::get('/backup/copias',                 [BackupController::class, 'copias'])->name('backup.copias');
    Route::delete('/backup/copias/{id}',         [BackupController::class, 'eliminarCopia'])->name('backup.eliminar-copia');

    // Usuarios (pendiente)
    Route::get('/usuarios',              [UsuarioController::class, 'index'])->name('usuarios.index');
    Route::get('/usuarios/create',       [UsuarioController::class, 'create'])->name('usuarios.create');
    Route::post('/usuarios',             [UsuarioController::class, 'store'])->name('usuarios.store');
    Route::get('/usuarios/{id}',         [UsuarioController::class, 'show'])->name('usuarios.show');
    Route::get('/usuarios/{id}/edit',    [UsuarioController::class, 'edit'])->name('usuarios.edit');
    Route::put('/usuarios/{id}',         [UsuarioController::class, 'update'])->name('usuarios.update');
    Route::patch('/usuarios/{id}/toggle',[UsuarioController::class, 'toggleEstado'])->name('usuarios.toggle');

    //Notificaciones (pendiente)
    Route::get('/notificaciones/distritos/{id}',   [NotificacionController::class, 'getDistritos']);
    Route::get('/notificaciones/lotes/{id}',        [NotificacionController::class, 'getLotesPorDistrito']);
    Route::get('/notificaciones/datos-lote/{id}',   [NotificacionController::class, 'getDatosLote']);
    
    // CRUD
    Route::get('/notificaciones',                   [NotificacionController::class, 'index'])->name('notificaciones.index');
    Route::get('/notificaciones/create',            [NotificacionController::class, 'create'])->name('notificaciones.create');
    Route::post('/notificaciones',                  [NotificacionController::class, 'store'])->name('notificaciones.store');
    Route::get('/notificaciones/{id}',              [NotificacionController::class, 'show'])->name('notificaciones.show');
    Route::patch('/notificaciones/{id}/atender',    [NotificacionController::class, 'atender'])->name('notificaciones.atender');
    Route::delete('/notificaciones/{id}',           [NotificacionController::class, 'anular'])->name('notificaciones.anular');
    

    //reportes (pendiente)
    Route::get('/reportes/listado-clientes',       [ReporteController::class, 'listadoClientes'])->name('reportes.clientes');
    Route::get('/reportes/listado-distritos',      [ReporteController::class, 'listadoDistritos'])->name('reportes.distritos');
    Route::get('/reportes/listado-urbanizaciones', [ReporteController::class, 'listadoUrbanizaciones'])->name('reportes.urbanizaciones');
    Route::get('/reportes/listado-cobradores',     [ReporteController::class, 'listadoCobradores'])->name('reportes.cobradores');
    Route::get('/reportes/listado-vendedores',     [ReporteController::class, 'listadoVendedores'])->name('reportes.vendedores');
    Route::get('/reportes/listado-tipo-cambio',    [ReporteController::class, 'listadoTipoCambio'])->name('reportes.tipo-cambio');
    
    // ── Fase 1: Listados con filtros opcionales (urb/dist) ───────
    Route::get('/reportes/listado-terrenos',       [ReporteController::class, 'listadoTerrenos'])->name('reportes.terrenos');
    Route::get('/reportes/lotes-disponibles',      [ReporteController::class, 'lotesDisponibles'])->name('reportes.lotes-disponibles');
    
    // ── Fase 3: Seguimiento ──────────────────────────────────────
    Route::get( '/reportes/seguimiento',           [ReporteController::class, 'formulario'])->defaults('reporte', 'seguimiento')->name('reportes.seguimiento.form');
    Route::post('/reportes/seguimiento',           [ReporteController::class, 'seguimiento'])->name('reportes.seguimiento');
    
    // ── Formulario genérico de filtros ───────────────────────────
    Route::get('/reportes/filtros/{reporte}',      [ReporteController::class, 'formulario'])->name('reportes.filtros');

    // Reportes — AJAX cascada (siempre ANTES de las rutas con parámetros)
    Route::get('/reportes/distritos/{id}',  [ReporteController::class, 'getDistritosReporte'])->name('reportes.distritos-ajax');
    Route::get('/reportes/ajax/distritos/{idUrb}', [ReporteController::class, 'getDistritosReporte'])->name('reportes.ajax.distritos');
    Route::get('/reportes/manzanos/{id}',   [ReporteController::class, 'getManzanosReporte'])->name('reportes.manzanos-ajax');
    Route::get('/reportes/ajax/manzanos/{id}', [ReporteController::class, 'getManzanosReporte'])->name('reportes.manzanos-ajax');
    
    // Reporte Contratos
    Route::get('/reportes/contratos',       [ReporteController::class, 'contratosForm'])->name('reportes.contratos.form');
    Route::post('/reportes/contratos/pdf',  [ReporteController::class, 'contratosPdf'])->name('reportes.contratos.pdf');

    // AJAX manzanos desde tabla lotes (antes de las rutas con parámetros)
    Route::get('/reportes/ajax/manzanos-lotes/{idDis}', [ReporteController::class, 'getManzanosLotes'])->name('reportes.manzanos-lotes');

    // Lotes por estado
    Route::get('/reportes/lotes-por-estado',       [ReporteController::class, 'lotesPorEstadoForm'])->name('reportes.lotes-por-estado.form');
    Route::post('/reportes/lotes-por-estado/pdf',  [ReporteController::class, 'lotesPorEstadoPdf'])->name('reportes.lotes-por-estado.pdf');

    // resumen situacion
    Route::get('/reportes/resumen-situacion',      [ReporteController::class, 'resumenSituacionHtml'])->name('reportes.resumen-situacion');
    Route::get('/reportes/resumen-situacion/pdf',  [ReporteController::class, 'resumenSituacionPdf'])->name('reportes.resumen-situacion.pdf');

    // orden de tramite
    Route::get ('/reportes/orden-tramite',      [ReporteController::class, 'ordenTramiteForm'])->name('reportes.orden-tramite.form');
    Route::post('/reportes/orden-tramite/pdf',  [ReporteController::class, 'ordenTramitePdf'])->name('reportes.orden-tramite.pdf');

    // nota de entrega
    Route::get('/reportes/notas-entrega',      [ReporteController::class, 'notasEntregaForm'])->name('reportes.notas-entrega');
    Route::post('/reportes/notas-entrega/pdf', [ReporteController::class, 'notasEntregaPdf'])->name('reportes.notas-entrega.pdf');

    // Estado de Cuentas — Saldo por Cobrar
    Route::get ('/reportes/saldo-por-cobrar',     [ReporteController::class, 'saldoPorCobrarForm'])->name('reportes.saldo-por-cobrar.form');
    Route::post('/reportes/saldo-por-cobrar/pdf', [ReporteController::class, 'saldoPorCobrarPdf'])->name('reportes.saldo-por-cobrar.pdf');

    // reporte de recibos anulados
    Route::get('/reportes/recibos-anulados',      [ReporteController::class, 'recibosAnuladosForm'])->name('reportes.recibos-anulados');
    Route::post('/reportes/recibos-anulados/pdf', [ReporteController::class, 'recibosAnuladosPdf'])->name('reportes.recibos-anulados.pdf');

    // reporte de seguimiento
    Route::get('/reportes/seguimiento',      [ReporteController::class, 'seguimientoForm'])->name('reportes.seguimiento.form');
    Route::post('/reportes/seguimiento',     [ReporteController::class, 'seguimientoPdf'])->name('reportes.seguimiento');

    // reporte diario
    Route::get ('/reportes/reporte-diario',       [ReporteController::class, 'reporteDiarioForm'])->name('reportes.reporte-diario.form');
    Route::post('/reportes/reporte-diario/excel', [ReporteController::class, 'reporteDiarioExcel'])->name('reportes.reporte-diario.excel');

    // reporte de estado por lotes
    Route::get( '/reportes/estados-sector',     [ReporteController::class, 'estadosPorSectorForm'])->name('reportes.estados-sector');
    Route::post('/reportes/estados-sector/pdf', [ReporteController::class, 'estadosPorSectorPdf'])->name('reportes.estados-sector.pdf');
    
});