<?php

use App\Http\Controllers\CalendarioController;
use App\Http\Controllers\CentroCostoController;
use App\Http\Controllers\ConfiguracionController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\EmpleadoController;
use App\Http\Controllers\HojaTiempoController;
use App\Http\Controllers\IncapacidadController;
use App\Http\Controllers\PeriodoController;
use App\Http\Controllers\ReporteController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

Route::get('/', fn () => redirect()->route('dashboard'));

Auth::routes();

Route::middleware(['auth'])->group(function () {

    // Dashboard
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

    // Empleados + Usuarios (unificado)
    Route::resource('empleados', EmpleadoController::class);
    Route::patch('empleados/{empleado}/toggle-activo', [EmpleadoController::class, 'toggleActivo'])->name('empleados.toggle-activo');

    // Centros de costo
    Route::resource('centros-costo', CentroCostoController::class)->except(['show']);

    // Parámetros / Configuración
    Route::get ('configuracion', [ConfiguracionController::class, 'index'])->name('configuracion.index');
    Route::put ('configuracion', [ConfiguracionController::class, 'update'])->name('configuracion.update');

    // Periodos
    Route::resource('periodos', PeriodoController::class)->only(['index', 'create', 'store']);
    Route::post('periodos/{periodo}/activar',     [PeriodoController::class, 'activar'])->name('periodos.activar');
    Route::post('periodos/{periodo}/inactivar',   [PeriodoController::class, 'inactivar'])->name('periodos.inactivar');
    Route::post('periodos/{periodo}/cerrar',      [PeriodoController::class, 'cerrar'])->name('periodos.cerrar');
    Route::post('periodos/{periodo}/crear-hojas', [PeriodoController::class, 'crearHojas'])->name('periodos.crear-hojas');
    Route::post('periodos/{periodo}/limpiar',     [PeriodoController::class, 'limpiar'])->name('periodos.limpiar');
    Route::delete('periodos/{periodo}',           [PeriodoController::class, 'destroy'])->name('periodos.destroy');

    // Hojas de tiempo
    Route::get ('hojas-tiempo',                              [HojaTiempoController::class, 'index'])->name('hojas-tiempo.index');
    Route::post('hojas-tiempo/crear',                        [HojaTiempoController::class, 'crear'])->name('hojas-tiempo.crear');
    Route::get ('hojas-tiempo/{hojaTiempo}',                 [HojaTiempoController::class, 'show'])->name('hojas-tiempo.show');
    Route::get ('hojas-tiempo/{hojaTiempo}/distribucion',    [HojaTiempoController::class, 'distribucion'])->name('hojas-tiempo.distribucion');
    Route::post('hojas-tiempo/{hojaTiempo}/observacion-cc',  [HojaTiempoController::class, 'guardarObservacionCC'])->name('hojas-tiempo.observacion-cc');
    Route::post('hojas-tiempo/{hojaTiempo}/entrada',         [HojaTiempoController::class, 'guardarEntrada'])->name('hojas-tiempo.entrada');
    Route::post('hojas-tiempo/{hojaTiempo}/grilla',          [HojaTiempoController::class, 'guardarGrilla'])->name('hojas-tiempo.grilla');
    Route::post('hojas-tiempo/{hojaTiempo}/lote',            [HojaTiempoController::class, 'guardarLote'])->name('hojas-tiempo.lote');
    Route::post('hojas-tiempo/{hojaTiempo}/enviar',          [HojaTiempoController::class, 'enviar'])->name('hojas-tiempo.enviar');
    Route::post('hojas-tiempo/{hojaTiempo}/aprobar',         [HojaTiempoController::class, 'aprobar'])->name('hojas-tiempo.aprobar');
    Route::post('hojas-tiempo/{hojaTiempo}/devolver',        [HojaTiempoController::class, 'devolver'])->name('hojas-tiempo.devolver');
    Route::post('hojas-tiempo/{hojaTiempo}/limpiar',          [HojaTiempoController::class, 'limpiar'])->name('hojas-tiempo.limpiar');
    Route::delete('hojas-tiempo/{hojaTiempo}/eliminar',       [HojaTiempoController::class, 'eliminar'])->name('hojas-tiempo.eliminar');
    Route::post('entradas/{entrada}/comentar',               [HojaTiempoController::class, 'comentar'])->name('entradas.comentar');
    Route::get ('entradas/{entrada}/comentarios',            [HojaTiempoController::class, 'comentarios'])->name('entradas.comentarios');

    // Reportes — vistas
    Route::get('reportes/consolidado',  [ReporteController::class, 'consolidado'])->name('reportes.consolidado');

    // Reportes — PDF
    Route::get('reportes/pdf/hoja/{hojaTiempo}', [ReporteController::class, 'pdfHoja'])->name('reportes.pdf.hoja');
    Route::get('reportes/pdf/consolidado',          [ReporteController::class, 'pdfConsolidado'])->name('reportes.pdf.consolidado');
    Route::get('reportes/pdf/consolidado-empleado', [ReporteController::class, 'pdfConsolidadoEmpleado'])->name('reportes.pdf.consolidado-empleado');
    Route::get('reportes/pdf/horas-adicionales',    [ReporteController::class, 'pdfHorasAdicionales'])->name('reportes.pdf.horas-adicionales');
    Route::get('reportes/pdf/festivos',             [ReporteController::class, 'pdfFestivos'])->name('reportes.pdf.festivos');
    Route::get('reportes/pdf/compensatorios',       [ReporteController::class, 'pdfCompensatorios'])->name('reportes.pdf.compensatorios');

    // Reportes — CSV
    Route::get('reportes/csv/consolidado', [ReporteController::class, 'csvConsolidado'])->name('reportes.csv.consolidado');
    Route::get('reportes/csv/nomina',      [ReporteController::class, 'csvNomina'])->name('reportes.csv.nomina');

    // Incapacidades
    Route::resource('incapacidades', IncapacidadController::class)->except(['show']);
    Route::get('incapacidades-csv', [IncapacidadController::class, 'exportarCsv'])->name('incapacidades.csv');

    // Calendario (rutas actualizadas)
    Route::get ('calendario',                       [CalendarioController::class, 'index'])->name('calendario.index');
    Route::post('calendario/{calendario}/toggle',   [CalendarioController::class, 'toggleFestivo'])->name('calendario.toggle');
    Route::post('calendario/importar',              [CalendarioController::class, 'importarAnio'])->name('calendario.importar');
    Route::post('calendario/agregar',               [CalendarioController::class, 'agregarFestivo'])->name('calendario.agregar');
});