<?php

use App\Http\Controllers\Ajustador\AjustadorAuthController;
use App\Http\Controllers\Ajustador\AjustadorCasoController;
use App\Http\Controllers\Ajustador\AjustadorDashboardController;
use App\Http\Controllers\Ajustador\AjustadorNotificationController;
use App\Http\Controllers\Ajustador\AjustadorProfileController;
use App\Http\Controllers\AjustadorController;
use App\Http\Controllers\AprobacionController;
use App\Http\Controllers\AseguradoraController;
use App\Http\Controllers\CasoController;
use App\Http\Controllers\Catalogos\BrokerController;
use App\Http\Controllers\ChatController;
use App\Http\Controllers\CoordinacionController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\FacturacionController;
use App\Http\Controllers\MesaComprasController;
use App\Http\Controllers\MigrationController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\PersonalZurichController;
use App\Http\Controllers\PortalAseguradoraController;
use App\Http\Controllers\ProveedorController;
use App\Http\Controllers\ReparacionController;
use App\Http\Controllers\TallerController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

// Web-based migration ("Instalador Loco")
Route::get('/admin/instalador', [MigrationController::class, 'index']);
Route::post('/admin/instalador/ejecutar', [MigrationController::class, 'executeStep']);

Route::middleware(['auth'])->group(function () {
    Route::get('/', [DashboardController::class, 'index'])->name('dashboard');

    Route::resource('casos', CasoController::class);

    Route::get('/coordinacion', [CoordinacionController::class, 'index'])->name('coordinacion');
    Route::get('/coordinacion/ruta/{caso}', [CoordinacionController::class, 'ruta'])->name('coordinacion.ruta');
    Route::get('/coordinacion/imprimir/{caso}', [CoordinacionController::class, 'imprimir'])->name('coordinacion.imprimir');
    Route::post('/coordinacion/asignar/{caso}', [CoordinacionController::class, 'asignar'])->name('coordinacion.asignar');

    Route::get('/estados', [CasoController::class, 'estadosIndex'])->name('estados');

    Route::get('/casos/{caso}/estados', [CasoController::class, 'estados'])->name('casos.estados');
    Route::post('/casos/{caso}/estados', [CasoController::class, 'updateEstado'])->name('casos.update_estado');
    Route::post('/casos/{caso}/cambiar-estado', [CasoController::class, 'cambiarEstado'])->name('casos.cambiar_estado');
    Route::post('/casos/{caso}/archivos/{index}/eliminar', [CasoController::class, 'deleteFile'])->name('casos.archivos.eliminar');

    // Chat (admin)
    Route::get('/casos/{caso}/chat', [ChatController::class, 'index'])->name('casos.chat.index');
    Route::post('/casos/{caso}/chat', [ChatController::class, 'store'])->name('casos.chat.store');

    Route::get('/mesa-compras', [MesaComprasController::class, 'index'])->name('mesa-compras');
    Route::get('/mesa-compras/{caso}', [MesaComprasController::class, 'show'])->name('mesa-compras.show');
    Route::post('/mesa-compras/{caso}/notificar', [MesaComprasController::class, 'notificar'])->name('mesa-compras.notificar');
    Route::post('/mesa-compras/{caso}/grabar', [MesaComprasController::class, 'grabar'])->name('mesa-compras.grabar');
    Route::post('/mesa-compras/{caso}/recotizar', [MesaComprasController::class, 'recotizar'])->name('mesa-compras.recotizar');
    Route::get('/mesa-compras/{caso}/cuadro-comparativo', [MesaComprasController::class, 'generarCuadroComparativo'])->name('mesa-compras.cuadro');
    Route::post('/mesa-compras/{caso}/cuadro-comparativo', [MesaComprasController::class, 'uploadCuadroComparativo'])->name('mesa-compras.upload-cuadro');
    Route::post('/mesa-compras/{caso}/rechazar-impar', [MesaComprasController::class, 'rechazarImpar'])->name('mesa-compras.rechazar-impar');
    Route::post('/mesa-compras/{caso}/enviar-aprobacion', [MesaComprasController::class, 'enviarAprobacion'])->name('mesa-compras.enviar-aprobacion');

    Route::get('/reparacion', [ReparacionController::class, 'index'])->name('reparacion');
    Route::get('/casos/{caso}/reparacion', [ReparacionController::class, 'show'])->name('casos.reparacion');
    Route::post('/casos/{caso}/reparacion', [ReparacionController::class, 'update'])->name('casos.update_reparacion');
    Route::post('/casos/{caso}/prefactura', [ReparacionController::class, 'subirPrefactura'])->name('casos.prefactura');
    Route::post('/casos/{caso}/orden-salida-generar', [ReparacionController::class, 'generarOrdenSalida'])->name('casos.orden_salida_generar');
    Route::post('/casos/{caso}/orden-salida', [ReparacionController::class, 'ordenSalida'])->name('casos.orden_salida');
    Route::post('/casos/{caso}/actualizar-sias', [ReparacionController::class, 'actualizarSIAS'])->name('casos.actualizar_sias');

    Route::get('/facturacion', [FacturacionController::class, 'index'])->name('facturacion');
    Route::post('/facturacion/cargar', [FacturacionController::class, 'cargar'])->name('facturacion.cargar');
    Route::get('/facturacion/generar', [FacturacionController::class, 'generar'])->name('facturacion.generar');
    Route::get('/facturacion/reporte-ajustadores', [FacturacionController::class, 'reporteAjustadores'])->name('facturacion.reporte-ajustadores');

    Route::get('/linea-de-tiempo', [CasoController::class, 'timelineIndex'])->name('timeline');

    // Catálogos
    Route::resource('catalogos/aseguradoras', AseguradoraController::class)->parameters([
        'aseguradoras' => 'aseguradora',
    ]);

    Route::resource('catalogos/ajustadores', AjustadorController::class)->parameters([
        'ajustadores' => 'ajustador',
    ]);
    Route::post('/catalogos/ajustadores/{ajustador}/reset-password', [AjustadorController::class, 'resetPassword'])->name('ajustadores.reset-password');

    Route::resource('catalogos/brokers', BrokerController::class)->parameters([ // Added this route
        'brokers' => 'broker',
    ]);

    Route::resource('catalogos/talleres', TallerController::class)->parameters([
        'talleres' => 'taller',
    ]);

    Route::resource('catalogos/proveedores', ProveedorController::class)->parameters([
        'proveedores' => 'proveedor',
    ]);

    Route::resource('catalogos/personal', PersonalZurichController::class)->parameters([
        'personal' => 'personal',
    ]);
}); // End of auth middleware group

// Portal Aseguradora (Vista Externa)
Route::get('/portal', [PortalAseguradoraController::class, 'login'])->name('portal.login');
Route::post('/portal/autenticar', [PortalAseguradoraController::class, 'authenticate'])->name('portal.authenticate');
Route::get('/portal/dashboard', [PortalAseguradoraController::class, 'dashboard'])->name('portal.dashboard');
Route::get('/portal/casos', [PortalAseguradoraController::class, 'casos'])->name('portal.casos');
Route::get('/portal/casos/{caso}', [PortalAseguradoraController::class, 'verCaso'])->name('portal.casos.ver');
Route::get('/portal/casos/{caso}/timeline', [PortalAseguradoraController::class, 'timeline'])->name('portal.casos.timeline');
Route::get('/portal/casos/{caso}/fotos', [PortalAseguradoraController::class, 'fotos'])->name('portal.casos.fotos');
Route::get('/portal/casos/{caso}/informe', [PortalAseguradoraController::class, 'informe'])->name('portal.casos.informe');
Route::post('/portal/caso-no-encontrado', [PortalAseguradoraController::class, 'casoNoEncontrado'])->name('portal.caso_no_encontrado');
Route::post('/portal/logout', [PortalAseguradoraController::class, 'logout'])->name('portal.logout');

// Ajustador Portal
Route::get('/ajustador/login', [AjustadorAuthController::class, 'showLoginForm'])->name('ajustador.login');
Route::post('/ajustador/login', [AjustadorAuthController::class, 'login'])->name('ajustador.login.post');

Route::middleware(['ajustador.auth'])->group(function () {
    Route::get('/ajustador/dashboard', [AjustadorDashboardController::class, 'index'])->name('ajustador.dashboard');
    Route::get('/ajustador/casos/{caso}', [AjustadorDashboardController::class, 'show'])->name('ajustador.casos.show');
    Route::post('/ajustador/casos/{caso}/estado', [AjustadorCasoController::class, 'updateStatus'])->name('ajustador.casos.estado');
    Route::post('/ajustador/casos/{caso}/archivos', [AjustadorCasoController::class, 'uploadFiles'])->name('ajustador.casos.archivos');
    Route::post('/ajustador/casos/{caso}/archivos/{index}/eliminar', [AjustadorCasoController::class, 'deleteFile'])->name('ajustador.casos.archivos.eliminar');
    Route::post('/ajustador/casos/{caso}/confirmar-llegada', [AjustadorCasoController::class, 'confirmarLlegada'])->name('ajustador.casos.confirmar-llegada');
    Route::post('/ajustador/casos/{caso}/informe', [AjustadorCasoController::class, 'enviarInforme'])->name('ajustador.casos.informe');
    Route::get('/ajustador/casos/{caso}/chat', [ChatController::class, 'index'])->name('ajustador.casos.chat.index');
    Route::post('/ajustador/casos/{caso}/chat', [ChatController::class, 'store'])->name('ajustador.casos.chat.store');
    Route::get('/ajustador/perfil', [AjustadorProfileController::class, 'edit'])->name('ajustador.profile');
    Route::put('/ajustador/perfil/password', [AjustadorProfileController::class, 'updatePassword'])->name('ajustador.profile.password');
    Route::post('/ajustador/logout', [AjustadorAuthController::class, 'logout'])->name('ajustador.logout');

    // Notifications
    Route::get('/ajustador/api/notifications', [AjustadorNotificationController::class, 'index'])->name('ajustador.notifications.index');
    Route::post('/ajustador/api/notifications/{notificacion}/read', [AjustadorNotificationController::class, 'markAsRead'])->name('ajustador.notifications.read');
    Route::post('/ajustador/api/notifications/read-all', [AjustadorNotificationController::class, 'markAllAsRead'])->name('ajustador.notifications.read-all');
});

// External Approval Links (M6: Public, no auth required)
Route::get('/aprobacion-compra/{token}', [AprobacionController::class, 'show'])->name('aprobacion.show');
Route::post('/aprobacion-compra/{token}', [AprobacionController::class, 'responder'])->name('aprobacion.responder');

Route::middleware(['auth'])->group(function () {
    // API Routes can be added here
    Route::get('/api/notifications', [NotificationController::class, 'index'])->name('api.notifications.index');
    Route::post('/api/notifications/{notificacion}/read', [NotificationController::class, 'markAsRead'])->name('api.notifications.read');
    Route::post('/api/notifications/read-all', [NotificationController::class, 'markAllAsRead'])->name('api.notifications.read-all');

    Route::resource('usuarios', UserController::class)->except(['show']);
});

require __DIR__.'/auth.php';
