<?php
require_once "../../functions.php";
$pag = basename($_SERVER['PHP_SELF']);
gen_plantilla(true, $pag, false, false, '', false, false);

if (!isset($_POST["empleado"]) || !isset($_POST["año"]))
    exit;

$id_empleado = filter_input(INPUT_POST, "empleado", FILTER_SANITIZE_NUMBER_INT);
$año = filter_input(INPUT_POST, "año", FILTER_SANITIZE_NUMBER_INT);

// Obtener id_grupo del empleado
$emp_data = consulta("SELECT id_grupo FROM empleados WHERE id=?", [$id_empleado], true);
$id_grupo = !empty($emp_data) ? ($emp_data[0]['id_grupo'] ?? 0) : 0;

// Obtener todos los festivos del año
$fecha_inicio_año = "$año-01-01";
$fecha_fin_año = "$año-12-31";

$dias_festivos = consulta(
    'SELECT di.*, m.nombre AS motivo FROM dias_inhabiles di
     INNER JOIN motivos m ON m.id = di.id_motivo
     WHERE di.fecha_entrada <= ? AND di.fecha_termina >= ?;',
    [$fecha_fin_año, $fecha_inicio_año],
    true
);

// Vacaciones de otros empleados (si está activado)
$vacaciones_otros = [];
if (get_config('ver_vacaciones_otros')) {
    $vacaciones_otros = consulta(
        'SELECT di.fecha_entrada, di.fecha_termina, e.nombre, e.apellidos
         FROM dias_inhabiles di
         INNER JOIN empleados e ON e.id = di.id_empleado
         WHERE di.id_empleado IS NOT NULL AND di.id_empleado != ?
         AND di.id_motivo = 3
         AND di.fecha_entrada <= ? AND di.fecha_termina >= ?;',
        [$id_empleado, $fecha_fin_año, $fecha_inicio_año],
        true
    );
}

// Solicitudes de vacaciones del empleado (para obtener motivo)
$solicitudes_empleado = consulta(
    'SELECT fecha_inicio, fecha_fin, motivo FROM solicitudes_vacaciones
     WHERE id_empleado = ? AND estado = 2
     AND fecha_inicio <= ? AND fecha_fin >= ?;',
    [$id_empleado, $fecha_fin_año, $fecha_inicio_año],
    true
);

// Función: comprobar si un día es festivo para este empleado
function obtener_festivo($fecha, $dias_festivos, $id_grupo, $id_empleado) {
    foreach ($dias_festivos as $f) {
        if (
            strtotime($fecha) >= strtotime($f['fecha_entrada']) &&
            strtotime($fecha) <= strtotime($f['fecha_termina']) &&
            (
                (!empty($f['id_grupo']) && !empty($id_grupo) && $f['id_grupo'] == $id_grupo) ||
                (!empty($f['id_empleado']) && !empty($id_empleado) && $f['id_empleado'] == $id_empleado)
            )
        ) {
            return $f;
        }
    }
    return null;
}

// Función: obtener nombres de vacaciones de otros empleados ese día
function obtener_vacaciones_otros($fecha, $vacaciones_otros) {
    $nombres = [];
    foreach ($vacaciones_otros as $vac) {
        if (strtotime($fecha) >= strtotime($vac['fecha_entrada']) && strtotime($fecha) <= strtotime($vac['fecha_termina'])) {
            $n = $vac['nombre'];
            if (!empty($vac['apellidos'])) $n .= ' ' . $vac['apellidos'];
            $nombres[] = $n;
        }
    }
    return $nombres;
}

// Función: obtener motivo de solicitud de vacaciones propia
function obtener_motivo_vacacion($fecha, $solicitudes_empleado) {
    foreach ($solicitudes_empleado as $sol) {
        if (strtotime($fecha) >= strtotime($sol['fecha_inicio']) && strtotime($fecha) <= strtotime($sol['fecha_fin'])) {
            return $sol['motivo'] ?? '';
        }
    }
    return '';
}

$meses_nombres = [
    1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
    5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
    9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre'
];
$dias_semana = ['L', 'M', 'X', 'J', 'V', 'S', 'D'];

echo "<style>
.cal-anual {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 2rem;
    width: 100%;
    width: 100%;
}
@media (max-width: 900px) {
    .cal-anual { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
    .cal-anual { grid-template-columns: 1fr; }
}
.cal-mes {
    border: 1px solid light-dark(#ddd, #444);
    border-radius: 0.7rem;
    overflow: hidden;
    aspect-ratio: 3 / 4;
    display: flex;
    flex-direction: column;
}
.cal-mes-titulo {
    text-align: center;
    font-weight: bold;
    padding: 0.7rem;
    background: light-dark(#f0f0f5, #2a2a3e);
    font-size: 1.2rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
}
.cal-mes-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 3px;
    padding: 0.5rem;
    flex: 1;
    align-content: start;
}
.cal-dia-header {
    text-align: center;
    font-weight: bold;
    font-size: 1rem;
    padding: 0.5rem 0;
    color: light-dark(#666, #aaa);
}
.cal-dia {
    text-align: center;
    font-size: 1.1rem;
    aspect-ratio: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 0.3rem;
    position: relative;
    transition: transform 0.1s;
}
.cal-dia[onclick]:hover,
.cal-dia[title]:hover {
    transform: scale(1.15);
    z-index: 1;
}
.cal-dia-fds {
    color: light-dark(#999, #d3d3d3);
}
.cal-dia-hoy {
    outline: 2.5px solid var(--dorado, orange);
    outline-offset: -1px;
    font-weight: bold;
}
.cal-dia-festivo {
    background-color: light-dark(#ffe0e0, #5c1e1e);
    color: light-dark(#c00, #ff6b6b);
    font-weight: bold;
    cursor: pointer;
}
.cal-dia-vacacion {
    background-color: light-dark(#d0e0ff, #1a2a4a);
    color: light-dark(#0055cc, #6baaff);
    font-weight: bold;
    cursor: pointer;
}
.cal-dia-vacacion-otro {
    background-color: light-dark(#ede0ff, #2d1a4a);
    color: light-dark(#7c3aed, #c4a5ff);
    font-weight: bold;
    cursor: pointer;
}
.cal-dia-doble {
    background: linear-gradient(135deg, light-dark(#d0e0ff, #1a2a4a) 50%, light-dark(#ede0ff, #2d1a4a) 50%);
    color: light-dark(#0055cc, #6baaff);
    font-weight: bold;
    cursor: pointer;
}
.cal-leyenda {
    display: flex;
    gap: 1.5rem;
    justify-content: center;
    flex-wrap: wrap;
    margin-bottom: 1.5rem;
    font-size: 1rem;
}
.cal-leyenda span {
    display: flex;
    align-items: center;
    gap: 0.4rem;
}
.cal-leyenda-color {
    width: 1.2rem;
    height: 1.2rem;
    border-radius: 0.25rem;
    display: inline-block;
}
</style>";

// Leyenda
echo "<section class='cal-leyenda'>";
echo "<span><span class='cal-leyenda-color' style='background:light-dark(#ffe0e0, #5c1e1e);border:1px solid light-dark(#c00,#ff6b6b);'></span> Festivos</span>";
echo "<span><span class='cal-leyenda-color' style='background:light-dark(#d0e0ff, #1a2a4a);border:1px solid light-dark(#0055cc,#6baaff);'></span> Mis vacaciones</span>";
if (get_config('ver_vacaciones_otros')) {
    echo "<span><span class='cal-leyenda-color' style='background:light-dark(#ede0ff, #2d1a4a);border:1px solid light-dark(#7c3aed, #c4a5ff);'></span> Vacaciones de otros</span>";
}
echo "</section>";

echo "<section class='cal-anual'>";

for ($mes = 1; $mes <= 12; $mes++) {
    $dia_empieza = date('N', strtotime("$año-$mes-01"));
    $dia_final = date('t', strtotime("$año-$mes-01"));

    echo "<article class='cal-mes'>";
    echo "<div class='cal-mes-titulo'>" . $meses_nombres[$mes] . "</div>";
    echo "<div class='cal-mes-grid'>";

    // Header días semana
    foreach ($dias_semana as $d) {
        echo "<span class='cal-dia-header'>$d</span>";
    }

    // Espacios vacíos
    for ($i = 1; $i < $dia_empieza; $i++) {
        echo "<span class='cal-dia'></span>";
    }

    // 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);

        $festivo = obtener_festivo($fecha, $dias_festivos, $id_grupo, $id_empleado);
        $vac_otros = obtener_vacaciones_otros($fecha, $vacaciones_otros);

        $clases = 'cal-dia';
        $title = '';
        $data_attrs = '';

        $es_vacacion_propia = false;
        $fecha_fmt = date("d/m/Y", strtotime($fecha));
        if ($festivo) {
            if ($festivo['id_motivo'] == 3 && !empty($festivo['id_empleado']) && $festivo['id_empleado'] == $id_empleado) {
                $es_vacacion_propia = true;
                $motivo_vac = obtener_motivo_vacacion($fecha, $solicitudes_empleado);
                $motivo_vac_safe = htmlspecialchars($motivo_vac, ENT_QUOTES);
                // Mis vacaciones + vacaciones de otros = doble
                if (!empty($vac_otros)) {
                    $clases .= ' cal-dia-doble';
                    $title = 'Mis vacaciones';
                    $nombres_json = htmlspecialchars(json_encode($vac_otros, JSON_UNESCAPED_UNICODE), ENT_QUOTES);
                    $data_attrs = " onclick='mostrar_info_dia(this)' data-tipo='doble' data-nombres='$nombres_json' data-fecha='$fecha_fmt' data-motivo='$motivo_vac_safe'";
                } else {
                    $clases .= ' cal-dia-vacacion';
                    $title = $motivo_vac ?: 'Mis vacaciones';
                    $data_attrs = " onclick='mostrar_info_dia(this)' data-tipo='vacacion' data-fecha='$fecha_fmt' data-motivo='$motivo_vac_safe'";
                }
            } else {
                $clases .= ' cal-dia-festivo';
                $title = htmlspecialchars($festivo['motivo']);
                $motivo_safe = htmlspecialchars($festivo['motivo'], ENT_QUOTES);
                $data_attrs = " onclick='mostrar_info_dia(this)' data-tipo='festivo' data-motivo='$motivo_safe' data-fecha='$fecha_fmt'";
            }
        } elseif (!empty($vac_otros)) {
            $clases .= ' cal-dia-vacacion-otro';
            $nombres_json = htmlspecialchars(json_encode($vac_otros, JSON_UNESCAPED_UNICODE), ENT_QUOTES);
            $data_attrs = " onclick='mostrar_info_dia(this)' data-tipo='otros' data-nombres='$nombres_json' data-fecha='$fecha_fmt'";
            $title = implode(', ', $vac_otros);
        } elseif ($es_fds) {
            $clases .= ' cal-dia-fds';
        }

        if ($es_hoy) $clases .= ' cal-dia-hoy';

        echo "<span class='$clases'" . ($title ? " title='$title'" : '') . $data_attrs . ">$d</span>";
    }

    echo "</div></article>";
}

echo "</section>";
