<?php //25w13b - Calendario mensual de festivos y vacaciones (todos los empleados)
require_once("../../functions.php");
$pag = basename($_SERVER['PHP_SELF']);
gen_plantilla(true, $pag, false, false, '', false, false);
$mostrar_apellidos = get_config('mostrar_apellidos_tabla');

$mes = filter_input(INPUT_POST, 'mes', FILTER_SANITIZE_NUMBER_INT) ?: date('m');
$año = filter_input(INPUT_POST, 'año', FILTER_SANITIZE_NUMBER_INT) ?: date('Y');

// Días del mes
$dia_empieza_semana = date('N', strtotime("$año-$mes-01"));
$dia_final = date('t', strtotime("$año-$mes-01"));
$dia_final_semana = date('N', strtotime("$año-$mes-$dia_final"));

$fecha_inicio_mes = date("Y-m-d", strtotime("$año-$mes-01"));
$fecha_fin_mes = date("Y-m-t", strtotime($fecha_inicio_mes));

// Obtener todos los festivos/vacaciones del mes
$datos = consulta(
    'SELECT di.*, m.nombre AS motivo, 
            g.nombre AS grupo_nombre, 
            e.nombre AS emp_nombre, e.apellidos AS emp_apellidos
     FROM dias_inhabiles di
     INNER JOIN motivos m ON m.id = di.id_motivo
     LEFT JOIN grupos g ON g.id = di.id_grupo
     LEFT JOIN empleados e ON e.id = di.id_empleado
     WHERE di.fecha_entrada <= ? AND di.fecha_termina >= ?
     ORDER BY di.fecha_entrada;',
    [$fecha_fin_mes, $fecha_inicio_mes],
    true
);

// Construir mapa: fecha => [entries]
$mapa = [];
if (!empty($datos)) {
    foreach ($datos as $d) {
        $f_ini = max(strtotime($d['fecha_entrada']), strtotime($fecha_inicio_mes));
        $f_fin = min(strtotime($d['fecha_termina']), strtotime($fecha_fin_mes));
        $es_vacacion = ($d['id_motivo'] == 3);
        $es_grupo = !empty($d['id_grupo']);

        if ($es_grupo) {
            $nombre = $d['grupo_nombre'];
            $icono = '👥';
        } else {
            $nombre = $d['emp_nombre'];
            if ($mostrar_apellidos && !empty($d['emp_apellidos'])) {
                $nombre .= ' ' . $d['emp_apellidos'];
            }
            $icono = '🏖️';
        }

        $rango = date('d/m/Y', strtotime($d['fecha_entrada']));
        if ($d['fecha_entrada'] !== $d['fecha_termina']) {
            $rango .= ' → ' . date('d/m/Y', strtotime($d['fecha_termina']));
        }

        for ($t = $f_ini; $t <= $f_fin; $t += 86400) {
            $fecha = date('Y-m-d', $t);
            if (!isset($mapa[$fecha])) $mapa[$fecha] = [];

            $mapa[$fecha][] = [
                'tipo' => $es_vacacion ? 'vacacion' : 'festivo',
                'nombre' => $nombre,
                'icono' => $icono,
                'motivo' => $d['motivo'],
                'rango' => $rango,
                'es_grupo' => $es_grupo
            ];
        }
    }
}

echo "<style>
#calendario .linea:nth-of-type(1) { z-index: 60; position: relative; }
#calendario .linea:nth-of-type(2) { z-index: 50; position: relative; }
#calendario .linea:nth-of-type(3) { z-index: 40; position: relative; }
#calendario .linea:nth-of-type(4) { z-index: 30; position: relative; }
#calendario .linea:nth-of-type(5) { z-index: 20; position: relative; }
#calendario .linea:nth-of-type(6) { z-index: 10; position: relative; }

#calendario .linea .c-dia .tooltip {
    left: 50%;
    top: 1.2rem;
    margin-left: 0;
    transform: translateX(-50%);
    width: max-content;
    max-width: 14rem;
}
#calendario .linea .c-dia .trigger-tooltip:where(:hover, :focus) + .tooltip {
    transform: translateX(-50%);
}
/* Alinear a la derecha para jueves-domingo para que no se corte por la derecha y lunes-miércoles a la izquierda para que no se corte por la izq */
#calendario .linea .c-dia:nth-child(n+5) .tooltip {
    left: auto;
    right: 0;
    transform: none;
}
#calendario .linea .c-dia:nth-child(n+5) .trigger-tooltip:where(:hover, :focus) + .tooltip {
    transform: none;
}
#calendario .linea .c-dia:nth-child(-n+2) .tooltip {
    left: 0;
    transform: none;
}
#calendario .linea .c-dia:nth-child(-n+2) .trigger-tooltip:where(:hover, :focus) + .tooltip {
    transform: none;
}

.cal-fest-entry {
    font-size: 0.7em;
    padding: 0.1rem 0;
    cursor: pointer;
}
.cal-fest-entry-festivo {
    color: light-dark(#c00, #ff6b6b);
    font-weight: bold;
}
.cal-fest-entry-vacacion {
    color: light-dark(#0055cc, #6baaff);
    font-weight: bold;
}
#calendario .cal-fest-wrapper {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    flex: 1;
}
</style>";

// Header días de la semana
echo "<section class='linea flex row'>";
$dias = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo'];
foreach ($dias as $dia) {
    echo "<article class='c c-nombre'>$dia</article>";
}
echo "</section>";

// Días vacíos al inicio
echo "<section class='linea'>";
for ($i = 1; $i < $dia_empieza_semana; $i++) {
    echo "<article class='c-vacio c-dia'></article>";
}

// Días del mes
for ($d = 1; $d <= $dia_final; $d++) {
    $fecha = date("Y-m-d", strtotime("$año-$mes-$d"));
    $dia_semana_num = date('N', strtotime($fecha));
    $es_hoy = ($fecha == date('Y-m-d'));
    $es_fds = ($dia_semana_num >= 6);
    $entries = $mapa[$fecha] ?? [];

    // Nueva fila si es lunes y no es el primer día
    if ($dia_semana_num == 1 && $d !== 1) {
        echo "</section><section class='linea'>";
    }

    // Clase del día
    $clase = 'c-dia';
    if ($es_fds) $clase .= ' c-fds';
    if ($es_hoy) $clase .= ' c-hoy';

    echo "<article class='$clase'>";
    echo "<span class='c-num-dia'>$d</span>";

    // Mostrar entries
    if (!empty($entries)) {
        echo "<div class='cal-fest-wrapper'>";
        $shown = [];
        foreach ($entries as $e) {
            $key = $e['tipo'] . '|' . $e['nombre'];
            if (isset($shown[$key])) continue;
            $shown[$key] = true;

            $clase_entry = ($e['tipo'] === 'festivo') ? 'cal-fest-entry-festivo' : 'cal-fest-entry-vacacion';
            $tooltip_text = $e['motivo'] . ' (' . $e['rango'] . ')';

            if ($e['es_grupo']) {
                // Festivos de grupo: mostrar como texto de festivo (como el calendario original)
                echo "<section class='flex column supercentrado'><b class='azul' style='font-size:0.8em;text-align:center;'>" . htmlspecialchars($e['motivo']) . "</b></section>";
            } else {
                // Vacaciones de empleado: mostrar nombre
                echo "<section class='cal-fest-entry $clase_entry trigger-tooltip' style='text-align:center;'>";
                echo $e['icono'] . " " . htmlspecialchars($e['nombre']);
                echo "</section>";
                echo "<aside class='tooltip'><span>" . htmlspecialchars($tooltip_text) . "</span></aside>";
            }
        }
        echo "</div>";
    }

    echo "</article>";
}

// Días vacíos al final
for ($i = $dia_final_semana; $i < 7; $i++) {
    echo "<article class='c-vacio c-dia'></article>";
}
echo "</section>";
