<?php
include_once 'includes/header.php';
include_once 'config/database.php';

$database = new Database();
$conn = $database->getConnection();

// Obtener la empresa del usuario logueado
$codempresaUsuario = null;
try {
    $stmt = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
    $stmt->execute([$_SESSION['user']['codempleado']]);
    $resultado = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($resultado) {
        $codempresaUsuario = $resultado['codempresa'];
    }
} catch(PDOException $e) {
    $_SESSION['error'] = "Error al obtener la empresa del usuario: " . $e->getMessage();
}

// Obtener mes y año de los filtros
$mes = isset($_GET['mes']) ? (int)$_GET['mes'] : date('n');
$anio = isset($_GET['anio']) ? (int)$_GET['anio'] : date('Y');

// Validar mes y año
if ($mes < 1 || $mes > 12) $mes = date('n');
if ($anio < 2000 || $anio > 2100) $anio = date('Y');

// Guardar programación de turnos
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['guardar_turnos'])) {
    try {
        $mesPost = isset($_POST['mes']) ? (int)$_POST['mes'] : $mes;
        $anioPost = isset($_POST['anio']) ? (int)$_POST['anio'] : $anio;
        
        // Verificar si se está guardando todas las fechas del mes o solo una fecha
        if (isset($_POST['guardar_todos']) && $_POST['guardar_todos'] == '1') {
            // Guardar todos los turnos del mes (múltiples fechas)
            $turnosPorFecha = $_POST['turnos_por_fecha'] ?? [];
            
            if (empty($turnosPorFecha)) {
                throw new Exception("No hay turnos para guardar");
            }
            
            $conn->beginTransaction();
            $fechasGuardadas = [];
            
            foreach ($turnosPorFecha as $fecha => $turnos) {
                if (empty($turnos) || !is_array($turnos)) {
                    continue;
                }
                
                foreach ($turnos as $codempleado => $horariosArray) {
                    // $horariosArray puede ser un array de horarios o un string (compatibilidad)
                    if (!is_array($horariosArray)) {
                        $horariosArray = [$horariosArray];
                    }
                    
                    // Primero, eliminar todos los turnos existentes para este empleado en esta fecha
                    $stmt = $conn->prepare("DELETE FROM tprogturnos 
                                           WHERE codempleado = ? AND DATE(fecha) = ?");
                    $stmt->execute([$codempleado, $fecha]);
                    
                    // Luego, insertar los nuevos turnos (pueden ser múltiples)
                    // Si el array está vacío o solo contiene valores vacíos, no se inserta nada (solo se elimina)
                    $horariosValidos = [];
                    foreach ($horariosArray as $codhorario_per) {
                        $codhorario_per = trim($codhorario_per);
                        if (!empty($codhorario_per) && $codhorario_per != '' && $codhorario_per != '-') {
                            $horariosValidos[] = $codhorario_per;
                        }
                    }
                    
                    // Insertar solo los horarios válidos
                    foreach ($horariosValidos as $codhorario_per) {
                        $stmt = $conn->prepare("INSERT INTO tprogturnos 
                                               (codhorario_per, codempleado, fecha, codestadoturno, reg_entrada, reg_salida, foto_entrada) 
                                               VALUES (?, ?, ?, 1, NULL, NULL, NULL)");
                        $stmt->execute([$codhorario_per, $codempleado, $fecha]);
                    }
                }
                
                if (!in_array($fecha, $fechasGuardadas)) {
                    $fechasGuardadas[] = $fecha;
                }
            }
            
            $conn->commit();
            $_SESSION['success'] = "✅ Turnos guardados correctamente para " . count($fechasGuardadas) . " fecha(s) del mes";
        } else {
            // Guardar turnos de una fecha específica (comportamiento original)
            $turnos = $_POST['turnos'] ?? [];
            $fecha = $_POST['fecha'] ?? '';
            
            if (empty($fecha)) {
                throw new Exception("La fecha es obligatoria");
            }
            
            $conn->beginTransaction();
            
            foreach ($turnos as $codempleado => $horariosArray) {
                // $horariosArray puede ser un array de horarios o un string (compatibilidad)
                if (!is_array($horariosArray)) {
                    $horariosArray = [$horariosArray];
                }
                
                // Primero, eliminar todos los turnos existentes para este empleado en esta fecha
                $stmt = $conn->prepare("DELETE FROM tprogturnos 
                                       WHERE codempleado = ? AND DATE(fecha) = ?");
                $stmt->execute([$codempleado, $fecha]);
                
                // Luego, insertar los nuevos turnos (pueden ser múltiples)
                // Si el array está vacío o solo contiene valores vacíos, no se inserta nada (solo se elimina)
                $horariosValidos = [];
                foreach ($horariosArray as $codhorario_per) {
                    $codhorario_per = trim($codhorario_per);
                    if (!empty($codhorario_per) && $codhorario_per != '' && $codhorario_per != '-') {
                        $horariosValidos[] = $codhorario_per;
                    }
                }
                
                // Insertar solo los horarios válidos
                foreach ($horariosValidos as $codhorario_per) {
                    $stmt = $conn->prepare("INSERT INTO tprogturnos 
                                           (codhorario_per, codempleado, fecha, codestadoturno, reg_entrada, reg_salida, foto_entrada) 
                                           VALUES (?, ?, ?, 1, NULL, NULL, NULL)");
                    $stmt->execute([$codhorario_per, $codempleado, $fecha]);
                }
            }
            
            $conn->commit();
            $_SESSION['success'] = "✅ Turnos guardados correctamente para la fecha " . date('d/m/Y', strtotime($fecha));
        }
    } catch(Exception $e) {
        if ($conn->inTransaction()) {
            $conn->rollBack();
        }
        $_SESSION['error'] = "❌ Error al guardar los turnos: " . $e->getMessage();
    }
    header("Location: prog_de_turnos.php?mes=" . $mesPost . "&anio=" . $anioPost);
    exit();
}

// Obtener empleados de la empresa
$empleados = [];
try {
    $query = "SELECT codempleado, nombres, apellidoPaterno, apellidoMaterno 
              FROM templeado 
              WHERE codempresa = ? 
              ORDER BY apellidoPaterno, apellidoMaterno, nombres";
    $stmt = $conn->prepare($query);
    $stmt->execute([$codempresaUsuario]);
    $empleados = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $_SESSION['error'] = "❌ Error al obtener los empleados: " . $e->getMessage();
}

// Obtener horarios disponibles (solo de la empresa del usuario)
$horarios = [];
$horariosMap = []; // Mapa para acceso rápido
try {
    if ($codempresaUsuario) {
        $query = "SELECT codhorario_per, denominacion, sigla, hora_entrada, hora_salida 
                  FROM thorario_per 
                  WHERE codempresa = ?
                  ORDER BY hora_entrada";
        $stmt = $conn->prepare($query);
        $stmt->execute([$codempresaUsuario]);
        $horarios = $stmt->fetchAll(PDO::FETCH_ASSOC);
    } else {
        // Si no hay empresa, no mostrar ningún horario
        $horarios = [];
    }
    
    // Crear mapa para acceso rápido
    foreach ($horarios as $horario) {
        $horariosMap[$horario['codhorario_per']] = $horario;
    }
} catch(PDOException $e) {
    $_SESSION['error'] = "❌ Error al obtener los horarios: " . $e->getMessage();
}

// Obtener turnos ya programados para el mes y calcular horas totales por empleado
// Ahora permite múltiples turnos por empleado/fecha
$turnosProgramados = [];
$horasTotalesPorEmpleado = [];
try {
    $fechaInicio = sprintf('%04d-%02d-01', $anio, $mes);
    $fechaFin = date('Y-m-t', strtotime($fechaInicio));
    
    // Usar DATE() para convertir fecha a formato date si es necesario
    // Filtrar por empresa: solo turnos de empleados de la empresa y horarios de la empresa
    if ($codempresaUsuario) {
        $query = "SELECT t.codempleado, DATE(t.fecha) as fecha, t.codhorario_per, 
                         h.hora_entrada, h.hora_salida, t.codprgturnos
                  FROM tprogturnos t
                  LEFT JOIN thorario_per h ON t.codhorario_per = h.codhorario_per
                  INNER JOIN templeado e ON t.codempleado = e.codempleado
                  WHERE DATE(t.fecha) >= ? AND DATE(t.fecha) <= ?
                    AND e.codempresa = ? AND (h.codempresa = ? OR h.codempresa IS NULL)
                  ORDER BY t.codempleado, DATE(t.fecha), h.hora_entrada";
        $stmt = $conn->prepare($query);
        $stmt->execute([$fechaInicio, $fechaFin, $codempresaUsuario, $codempresaUsuario]);
    } else {
        // Si no hay empresa, no mostrar turnos
        $query = "SELECT t.codempleado, DATE(t.fecha) as fecha, t.codhorario_per, 
                         h.hora_entrada, h.hora_salida, t.codprgturnos
                  FROM tprogturnos t
                  LEFT JOIN thorario_per h ON t.codhorario_per = h.codhorario_per
                  WHERE 1=0";
        $stmt = $conn->prepare($query);
        $stmt->execute();
    }
    $resultados = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    foreach ($resultados as $row) {
        // Normalizar la fecha al formato Y-m-d
        $fechaNormalizada = date('Y-m-d', strtotime($row['fecha']));
        
        // Almacenar múltiples turnos por empleado/fecha (array)
        if (!isset($turnosProgramados[$row['codempleado']][$fechaNormalizada])) {
            $turnosProgramados[$row['codempleado']][$fechaNormalizada] = [];
        }
        $turnosProgramados[$row['codempleado']][$fechaNormalizada][] = [
            'codhorario_per' => $row['codhorario_per'],
            'codprgturnos' => $row['codprgturnos']
        ];
        
        // Calcular horas totales por empleado
        if ($row['hora_entrada'] && $row['hora_salida']) {
            $entrada = new DateTime($row['hora_entrada']);
            $salida = new DateTime($row['hora_salida']);
            if ($salida < $entrada) {
                $salida->modify('+1 day');
            }
            $duracion = $entrada->diff($salida);
            $horas = $duracion->h + ($duracion->i / 60);
            
            if (!isset($horasTotalesPorEmpleado[$row['codempleado']])) {
                $horasTotalesPorEmpleado[$row['codempleado']] = 0;
            }
            $horasTotalesPorEmpleado[$row['codempleado']] += $horas;
        }
    }
} catch(PDOException $e) {
    $_SESSION['error'] = "❌ Error al obtener los turnos programados: " . $e->getMessage();
}

// Generar días del mes
$diasEnMes = cal_days_in_month(CAL_GREGORIAN, $mes, $anio);
$dias = [];
for ($i = 1; $i <= $diasEnMes; $i++) {
    $fecha = sprintf('%04d-%02d-%02d', $anio, $mes, $i);
    $dias[] = [
        'numero' => $i,
        'fecha' => $fecha,
        'diaSemana' => date('w', strtotime($fecha)) // 0 = domingo, 6 = sábado
    ];
}

// Nombres de los meses
$meses = [
    1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
    5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
    9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre'
];
?>

<style>
.turnos-table {
    font-size: 0.75rem;
}

.turnos-table th {
    position: sticky;
    background: white;
    z-index: 10;
    border: 1px solid #dee2e6;
    padding: 4px 6px;
    text-align: center;
    font-weight: 600;
    font-size: 0.7rem;
}

.turnos-table th.empleado-col {
    position: sticky;
    left: 0;
    z-index: 11;
    background: white;
    min-width: 140px;
    max-width: 140px;
    text-align: left;
}

.turnos-table td {
    border: 1px solid #dee2e6;
    padding: 3px;
    vertical-align: middle;
}

.turnos-table td.empleado-col {
    position: sticky;
    left: 0;
    z-index: 10;
    background: white;
    font-weight: 500;
    font-size: 0.75rem;
    min-width: 140px;
    max-width: 140px;
}

.turnos-table select {
    width: 100%;
    padding: 2px 4px;
    font-size: 0.7rem;
    border: 1px solid #ced4da;
    border-radius: 3px;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background-image: none;
    padding-right: 4px;
}

.turnos-table select::-ms-expand {
    display: none;
}

.turnos-table .fecha-header {
    min-width: 50px;
    max-width: 50px;
    white-space: nowrap;
}

.turnos-table .fecha-cell {
    min-width: 50px;
    max-width: 50px;
    text-align: center;
    padding: 2px;
    position: relative;
}

.turnos-table .fecha-cell.selected {
    background-color: #b3d9ff !important;
    border: 2px solid #0066cc !important;
}

.turnos-table .horario-select.selected {
    background-color: #e3f2fd !important;
    border: 2px solid #2196f3 !important;
}

.turnos-table .fecha-cell .turno-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    min-height: 40px;
}

.turnos-table select {
    text-align: center;
}

.filtros-card {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    color: white;
    border-radius: 10px;
    padding: 20px;
    margin-bottom: 20px;
}

.filtros-card .form-label {
    color: white;
    font-weight: 600;
}

.filtros-card select {
    border-radius: 5px;
}

.table-container {
    overflow-x: auto;
    max-height: 80vh;
    border: 1px solid #dee2e6;
    border-radius: 8px;
}

.dia-semana {
    font-size: 0.7rem;
    color: #6c757d;
}

.dia-dom {
    background-color: #ffcccc !important;
}

.dia-dom th {
    background-color: #ffcccc !important;
}

.dia-dom td {
    background-color: #ffcccc !important;
}

.dia-sab {
    background-color: #e6f3ff;
}

.btn-guardar-celda {
    padding: 2px 4px;
    font-size: 0.7rem;
    line-height: 1.2;
}

.modal-sigla .modal-body {
    text-align: center;
}

.modal-sigla .form-select {
    text-align: center;
    font-size: 1.1rem;
    padding: 10px;
}

.horarios-seleccionados {
    min-height: 20px;
    display: flex;
    flex-wrap: wrap;
    gap: 2px;
}

.horario-badge {
    font-size: 0.65rem;
    padding: 2px 6px;
    display: inline-flex;
    align-items: center;
}

.horario-select-add {
    font-size: 0.7rem;
    padding: 2px 4px;
}

.turno-cell {
    min-height: 40px;
}
</style>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2><i class="fas fa-calendar-alt"></i> Programación de Turnos</h2>
    </div>

    <?php if (isset($_SESSION['success'])): ?>
        <div class="alert alert-success alert-custom">
            <i class="fas fa-check-circle"></i>
            <?php 
            echo $_SESSION['success']; 
            unset($_SESSION['success']);
            ?>
        </div>
    <?php endif; ?>

    <?php if (isset($_SESSION['error'])): ?>
        <div class="alert alert-danger alert-custom">
            <i class="fas fa-exclamation-triangle"></i>
            <?php 
            echo $_SESSION['error']; 
            unset($_SESSION['error']);
            ?>
        </div>
    <?php endif; ?>

    <!-- Filtros -->
    <div class="card filtros-card mb-4">
        <div class="card-body">
            <form method="GET" action="prog_de_turnos.php" class="row g-3">
                <div class="col-md-4">
                    <label class="form-label">
                        <i class="fas fa-calendar-month"></i> Mes
                    </label>
                    <select name="mes" class="form-select" required>
                        <?php for ($m = 1; $m <= 12; $m++): ?>
                            <option value="<?php echo $m; ?>" <?php echo $mes == $m ? 'selected' : ''; ?>>
                                <?php echo $meses[$m]; ?>
                            </option>
                        <?php endfor; ?>
                    </select>
                </div>
                <div class="col-md-4">
                    <label class="form-label">
                        <i class="fas fa-calendar-year"></i> Año
                    </label>
                    <select name="anio" class="form-select" required>
                        <?php for ($a = date('Y') - 2; $a <= date('Y') + 2; $a++): ?>
                            <option value="<?php echo $a; ?>" <?php echo $anio == $a ? 'selected' : ''; ?>>
                                <?php echo $a; ?>
                            </option>
                        <?php endfor; ?>
                    </select>
                </div>
                <div class="col-md-4 d-flex align-items-end">
                    <button type="submit" class="btn btn-light btn-lg w-100">
                        <i class="fas fa-search"></i> Filtrar
                    </button>
                </div>
            </form>
        </div>
    </div>

    <?php if (empty($empleados)): ?>
        <div class="alert alert-warning">
            <i class="fas fa-exclamation-triangle"></i> No se encontraron Usuarios para esta empresa.
        </div>
    <?php elseif (empty($horarios)): ?>
        <div class="alert alert-warning">
            <i class="fas fa-exclamation-triangle"></i> No hay horarios disponibles. Por favor, cree horarios en <a href="horarios_personal.php">Horarios Personal</a>.
        </div>
    <?php else: ?>
        <!-- Tabla de programación -->
        <div class="card">
            <div class="card-header bg-primary text-white">
                <h5 class="mb-0">
                    <i class="fas fa-table"></i> Programación de Turnos - <?php echo $meses[$mes] . ' ' . $anio; ?>
                </h5>
            </div>
            <div class="card-body p-0">
                <div class="table-container">
                    <table class="table table-bordered table-hover turnos-table mb-0">
                        <thead>
                            <tr>
                                <th class="empleado-col">
                                    <i class="fas fa-user"></i> Usuario
                                </th>
                                <?php foreach ($dias as $dia): 
                                    $esDomingo = $dia['diaSemana'] == 0;
                                    $esSabado = $dia['diaSemana'] == 6;
                                    $claseDia = $esDomingo ? 'dia-dom' : ($esSabado ? 'dia-sab' : '');
                                ?>
                                    <th class="fecha-header <?php echo $claseDia; ?>">
                                        <div style="font-weight: bold;"><?php echo $dia['numero']; ?></div>
                                        <div class="dia-semana" style="font-size: 0.65rem;">
                                            <?php 
                                            $diasSemana = ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'];
                                            echo $diasSemana[$dia['diaSemana']]; 
                                            ?>
                                        </div>
                                    </th>
                                <?php endforeach; ?>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($empleados as $empleado): 
                                $nombreCompleto = trim($empleado['nombres'] . ' ' . $empleado['apellidoPaterno'] . ' ' . $empleado['apellidoMaterno']);
                                $horasTotales = isset($horasTotalesPorEmpleado[$empleado['codempleado']]) 
                                    ? round($horasTotalesPorEmpleado[$empleado['codempleado']], 1) 
                                    : 0;
                            ?>
                                <tr>
                                    <td class="empleado-col">
                                        <strong><?php echo htmlspecialchars($nombreCompleto); ?></strong>
                                        <br>
                                        <small class="text-muted">
                                            <i class="fas fa-clock"></i> <?php echo $horasTotales; ?>h
                                        </small>
                                    </td>
                                    <?php foreach ($dias as $dia): 
                                        $fecha = $dia['fecha'];
                                        $turnosSeleccionados = $turnosProgramados[$empleado['codempleado']][$fecha] ?? [];
                                        $esDomingo = $dia['diaSemana'] == 0;
                                        $esSabado = $dia['diaSemana'] == 6;
                                        $claseDia = $esDomingo ? 'dia-dom' : ($esSabado ? 'dia-sab' : '');
                                        // Convertir a array si es necesario (compatibilidad)
                                        if (!is_array($turnosSeleccionados)) {
                                            $turnosSeleccionados = $turnosSeleccionados ? [$turnosSeleccionados] : [];
                                        }
                                    ?>
                                        <td class="fecha-cell <?php echo $claseDia; ?>" 
                                            data-fecha="<?php echo $fecha; ?>" 
                                            data-empleado="<?php echo $empleado['codempleado']; ?>"
                                            data-codempleado="<?php echo $empleado['codempleado']; ?>">
                                            <div class="turno-cell" data-fecha="<?php echo $fecha; ?>" data-empleado="<?php echo $empleado['codempleado']; ?>">
                                                <!-- Contenedor de horarios seleccionados -->
                                                <div class="horarios-seleccionados mb-1" id="horarios_<?php echo $empleado['codempleado']; ?>_<?php echo str_replace('-', '_', $fecha); ?>">
                                                    <?php 
                                                    foreach ($turnosSeleccionados as $turno): 
                                                        $codhorario = is_array($turno) ? $turno['codhorario_per'] : $turno;
                                                        if (isset($horariosMap[$codhorario])):
                                                            $horario = $horariosMap[$codhorario];
                                                            $sigla = !empty($horario['sigla']) ? $horario['sigla'] : substr($horario['denominacion'], 0, 2);
                                                    ?>
                                                        <span class="badge bg-primary me-1 mb-1 horario-badge" 
                                                              data-codhorario="<?php echo $codhorario; ?>"
                                                              data-codprgturnos="<?php echo is_array($turno) && isset($turno['codprgturnos']) ? $turno['codprgturnos'] : ''; ?>">
                                                            <?php echo htmlspecialchars($sigla); ?>
                                                            <button type="button" class="btn-close btn-close-white ms-1" 
                                                                    style="font-size: 0.6em;"
                                                                    onclick="eliminarHorario(this, <?php echo $empleado['codempleado']; ?>, '<?php echo $fecha; ?>', <?php echo $codhorario; ?>)"></button>
                                                        </span>
                                                    <?php 
                                                        endif;
                                                    endforeach; 
                                                    ?>
                                                </div>
                                                <!-- Select para agregar nuevo horario -->
                                                <select class="form-select form-select-sm horario-select-add" 
                                                        data-fecha="<?php echo $fecha; ?>"
                                                        data-empleado="<?php echo $empleado['codempleado']; ?>"
                                                        onchange="agregarHorario(this, <?php echo $empleado['codempleado']; ?>, '<?php echo $fecha; ?>')">
                                                    <option value="">+ Agregar</option>
                                                    <?php foreach ($horarios as $horario): 
                                                        $sigla = !empty($horario['sigla']) ? $horario['sigla'] : substr($horario['denominacion'], 0, 2);
                                                        // Verificar si ya está seleccionado
                                                        $yaSeleccionado = false;
                                                        foreach ($turnosSeleccionados as $turno) {
                                                            $codhorario = is_array($turno) ? $turno['codhorario_per'] : $turno;
                                                            if ($codhorario == $horario['codhorario_per']) {
                                                                $yaSeleccionado = true;
                                                                break;
                                                            }
                                                        }
                                                    ?>
                                                        <option value="<?php echo $horario['codhorario_per']; ?>" 
                                                                <?php echo $yaSeleccionado ? 'disabled' : ''; ?>
                                                                data-entrada="<?php echo date('H:i', strtotime($horario['hora_entrada'])); ?>"
                                                                data-salida="<?php echo date('H:i', strtotime($horario['hora_salida'])); ?>"
                                                                data-sigla="<?php echo htmlspecialchars($sigla); ?>">
                                                            <?php echo htmlspecialchars($sigla); ?> 
                                                            <?php if ($yaSeleccionado): ?> (ya agregado)<?php endif; ?>
                                                        </option>
                                                    <?php endforeach; ?>
                                                </select>
                                            </div>
                                        </td>
                                    <?php endforeach; ?>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </div>
            <div class="card-footer">
                <div class="row">
                    <div class="col-md-6">
                        <small class="text-muted">
                            <i class="fas fa-info-circle"></i> 
                            Seleccione un horario para cada empleado y fecha. Use el botón "Guardar Todos los Cambios" para guardar.
                            <br>
                            <i class="fas fa-mouse-pointer"></i> 
                            <strong>Selección múltiple:</strong> Mantenga presionada la tecla <kbd>Ctrl</kbd> y haga clic en varias fechas (o en los selects) para seleccionarlas.
                        </small>
                    </div>
                    <div class="col-md-6 text-end">
                        <button type="button" class="btn btn-success me-2" id="btnAplicarTurnosMultiples" style="display: none;">
                            <i class="fas fa-check"></i> Aplicar Horario a Seleccionados
                        </button>
                        <button type="button" class="btn btn-primary" id="btn-guardar-todos" onclick="guardarTodosLosTurnos()">
                            <i class="fas fa-save"></i> Guardar Todos los Cambios
                        </button>
                    </div>
                </div>
            </div>
        </div>
    <?php endif; ?>
</div>

<!-- Modal para selección múltiple de siglas -->
<div class="modal fade" id="modalSiglaMultiple" tabindex="-1" aria-labelledby="modalSiglaMultipleLabel" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="modalSiglaMultipleLabel">
                    <i class="fas fa-calendar-check"></i> Seleccionar Horario para Fechas Múltiples
                </h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body modal-sigla">
                <p class="mb-3">
                    Se aplicará el horario seleccionado a <strong id="cantidadFechasSeleccionadas">0</strong> fecha(s).
                </p>
                <select id="selectSiglaMultiple" class="form-select form-select-lg">
                    <option value="">- Seleccionar Horario -</option>
                    <?php foreach ($horarios as $horario): 
                        $sigla = !empty($horario['sigla']) ? $horario['sigla'] : substr($horario['denominacion'], 0, 2);
                    ?>
                        <option value="<?php echo $horario['codhorario_per']; ?>" 
                                data-sigla="<?php echo htmlspecialchars($sigla); ?>">
                            <?php echo htmlspecialchars($sigla); ?> 
                            (<?php echo date('H:i', strtotime($horario['hora_entrada'])); ?>-<?php echo date('H:i', strtotime($horario['hora_salida'])); ?>)
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
                <button type="button" class="btn btn-primary" id="btnAplicarSiglaMultiple">
                    <i class="fas fa-check"></i> Aplicar
                </button>
            </div>
        </div>
    </div>
</div>

<script>
// Función para agregar un horario a una celda
function agregarHorario(select, codempleado, fecha) {
    const codhorario = select.value;
    if (!codhorario) {
        return;
    }
    
    const option = select.options[select.selectedIndex];
    const sigla = option.getAttribute('data-sigla') || codhorario;
    
    // Obtener el contenedor de horarios
    const contenedorId = 'horarios_' + codempleado + '_' + fecha.replace(/-/g, '_');
    const contenedor = document.getElementById(contenedorId);
    
    if (!contenedor) {
        console.error('No se encontró el contenedor:', contenedorId);
        return;
    }
    
    // Verificar si ya existe este horario
    const badges = contenedor.querySelectorAll('.horario-badge');
    for (let badge of badges) {
        if (badge.getAttribute('data-codhorario') == codhorario) {
            // Ya existe, no agregar
            select.value = '';
            return;
        }
    }
    
    // Crear el badge del horario
    const badge = document.createElement('span');
    badge.className = 'badge bg-primary me-1 mb-1 horario-badge';
    badge.setAttribute('data-codhorario', codhorario);
    badge.innerHTML = sigla + 
        '<button type="button" class="btn-close btn-close-white ms-1" ' +
        'style="font-size: 0.6em;" ' +
        'onclick="eliminarHorario(this, ' + codempleado + ', \'' + fecha + '\', ' + codhorario + ')"></button>';
    
    contenedor.appendChild(badge);
    
    // Deshabilitar la opción en el select
    option.disabled = true;
    
    // Resetear el select
    select.value = '';
}

// Función para eliminar un horario de una celda
function eliminarHorario(btn, codempleado, fecha, codhorario) {
    const badge = btn.closest('.horario-badge');
    if (badge) {
        badge.remove();
        
        // Habilitar la opción en el select correspondiente
        const contenedor = badge.closest('.turno-cell');
        const select = contenedor.querySelector('.horario-select-add');
        if (select) {
            const option = select.querySelector('option[value="' + codhorario + '"]');
            if (option) {
                option.disabled = false;
            }
        }
    }
}

document.addEventListener('DOMContentLoaded', function() {
    const urlParams = new URLSearchParams(window.location.search);
    const mes = urlParams.get('mes') || <?php echo $mes; ?>;
    const anio = urlParams.get('anio') || <?php echo $anio; ?>;
    
    // Variables para selección múltiple (similar a crear_rol.php)
    const horarioSelects = document.querySelectorAll('.horario-select');
    const btnAplicarTurnosMultiples = document.getElementById('btnAplicarTurnosMultiples');
    let selectedTurnos = new Set();
    let modalSiglaMultiple = null;
    
    // Inicializar modal después de que el DOM esté listo
    const modalElement = document.getElementById('modalSiglaMultiple');
    if (modalElement) {
        modalSiglaMultiple = new bootstrap.Modal(modalElement);
    }
    
    // Función para actualizar el botón de aplicar
    function actualizarBotonAplicar() {
        if (btnAplicarTurnosMultiples) {
            btnAplicarTurnosMultiples.style.display = selectedTurnos.size > 0 ? 'inline-block' : 'none';
        }
    }
    
    // Manejar selección con Ctrl+click en las celdas (para agregar horarios múltiples)
    document.querySelectorAll('.fecha-cell').forEach(celda => {
        celda.addEventListener('mousedown', function(e) {
            // Solo si NO es un clic directo en el select o botón de eliminar
            if (e.target.tagName === 'SELECT' || e.target.classList.contains('btn-close') || e.target.closest('.btn-close')) {
                return;
            }
            
            if (e.ctrlKey || e.metaKey) {
                e.preventDefault();
                e.stopPropagation();
                
                if (this.classList.contains('selected')) {
                    this.classList.remove('selected');
                    selectedTurnos.delete(this);
                } else {
                    this.classList.add('selected');
                    selectedTurnos.add(this);
                }
                
                actualizarBotonAplicar();
            }
        });
    });
    
    
    // Mostrar modal al hacer clic en el botón de aplicar
    if (btnAplicarTurnosMultiples) {
        btnAplicarTurnosMultiples.addEventListener('click', function() {
            if (selectedTurnos.size === 0) {
                alert('Por favor seleccione al menos una celda');
                return;
            }
            
            // Actualizar cantidad de fechas seleccionadas
            document.getElementById('cantidadFechasSeleccionadas').textContent = selectedTurnos.size;
            
            // Limpiar selección previa en el modal
            document.getElementById('selectSiglaMultiple').value = '';
            
            // Mostrar el modal
            if (modalSiglaMultiple) {
                modalSiglaMultiple.show();
            }
        });
    }
    
    // Aplicar sigla a todas las celdas seleccionadas
    if (document.getElementById('btnAplicarSiglaMultiple')) {
        document.getElementById('btnAplicarSiglaMultiple').addEventListener('click', function() {
            const selectSigla = document.getElementById('selectSiglaMultiple');
            const codhorario_per = selectSigla.value;
            
            if (!codhorario_per) {
                alert('Por favor seleccione un horario');
                return;
            }
            
            try {
                // Aplicar el horario a todas las celdas seleccionadas
                selectedTurnos.forEach(celda => {
                    // Verificar si el horario ya existe en esta celda
                    const horarios = obtenerHorariosDeCelda(celda);
                    if (horarios.includes(codhorario_per)) {
                        // Ya existe, no agregar
                        return;
                    }
                    
                    // Obtener datos de la celda
                    const fecha = celda.getAttribute('data-fecha');
                    const codempleado = celda.getAttribute('data-empleado');
                    
                    if (!fecha || !codempleado) {
                        return;
                    }
                    
                    // Obtener la opción del select para obtener la sigla
                    const selectSigla = document.getElementById('selectSiglaMultiple');
                    const option = selectSigla.querySelector('option[value="' + codhorario_per + '"]');
                    const sigla = option ? option.getAttribute('data-sigla') : codhorario_per;
                    
                    // Agregar el horario usando la función agregarHorario
                    const select = celda.querySelector('.horario-select-add');
                    if (select) {
                        // Simular selección del horario
                        select.value = codhorario_per;
                        agregarHorario(select, codempleado, fecha);
                    }
                    
                    // Remover la clase selected de la celda
                    celda.classList.remove('selected');
                });
                
                // Limpiar selección
                selectedTurnos.clear();
                actualizarBotonAplicar();
                
                // Cerrar modal
                if (modalSiglaMultiple) {
                    modalSiglaMultiple.hide();
                }
                
                // Mostrar mensaje de éxito
                alert('Horarios aplicados correctamente');
            } catch (error) {
                console.error('Error al aplicar horarios:', error);
                alert('Error al aplicar los horarios. Por favor intente nuevamente.');
            }
        });
    }
    
    // Limpiar selección al hacer clic fuera (sin Ctrl)
    document.addEventListener('click', function(e) {
        if (!e.ctrlKey && !e.metaKey && 
            !e.target.closest('.fecha-cell') &&
            !e.target.closest('#modalSiglaMultiple') &&
            !e.target.closest('#btnAplicarTurnosMultiples')) {
            selectedTurnos.forEach(celda => {
                celda.classList.remove('selected');
            });
            selectedTurnos.clear();
            actualizarBotonAplicar();
        }
    });
    
    // Función para obtener todos los horarios de una celda
    function obtenerHorariosDeCelda(celda) {
        const horarios = [];
        const contenedor = celda.querySelector('.horarios-seleccionados');
        if (contenedor) {
            const badges = contenedor.querySelectorAll('.horario-badge');
            badges.forEach(badge => {
                const codhorario = badge.getAttribute('data-codhorario');
                if (codhorario) {
                    horarios.push(codhorario);
                }
            });
        }
        return horarios;
    }
    
    // Guardar todos los turnos del mes
    window.guardarTodosLosTurnos = function() {
        if (!confirm('¿Está seguro de guardar todos los cambios del mes?')) {
            return;
        }
        
        // Obtener todas las celdas de fecha
        const todasLasCeldas = document.querySelectorAll('.fecha-cell');
        
        if (todasLasCeldas.length === 0) {
            alert('No hay fechas para guardar');
            return;
        }
        
        // Agrupar todos los turnos por fecha (incluir todas las celdas, incluso las vacías)
        const turnosPorFecha = {};
        let hayCambios = false;
        
        todasLasCeldas.forEach(celda => {
            const fecha = celda.getAttribute('data-fecha');
            const codempleado = celda.getAttribute('data-empleado');
            
            if (!fecha || !codempleado) {
                return;
            }
            
            // Obtener todos los horarios de esta celda
            const horarios = obtenerHorariosDeCelda(celda);
            
            // Incluir todas las celdas, incluso las que no tienen horarios
            // Esto permite eliminar turnos cuando se borran todos los horarios
            if (!turnosPorFecha[fecha]) {
                turnosPorFecha[fecha] = {};
            }
            
            // Si hay horarios, almacenarlos; si no, almacenar array vacío para eliminar
            if (horarios.length > 0) {
                turnosPorFecha[fecha][codempleado] = horarios;
                hayCambios = true;
            } else {
                // Marcar como array vacío para eliminar todos los turnos de este empleado en esta fecha
                turnosPorFecha[fecha][codempleado] = [];
                hayCambios = true;
            }
        });
        
        if (!hayCambios) {
            alert('No hay cambios para guardar');
            return;
        }
        
        // Crear un solo formulario para enviar todos los turnos
        const form = document.createElement('form');
        form.method = 'POST';
        form.action = 'prog_de_turnos.php';
        
        // Agregar mes y año
        const mesInput = document.createElement('input');
        mesInput.type = 'hidden';
        mesInput.name = 'mes';
        mesInput.value = mes;
        form.appendChild(mesInput);
        
        const anioInput = document.createElement('input');
        anioInput.type = 'hidden';
        anioInput.name = 'anio';
        anioInput.value = anio;
        form.appendChild(anioInput);
        
        // Agregar flag para indicar que se guardan todos los turnos
        const guardarTodosInput = document.createElement('input');
        guardarTodosInput.type = 'hidden';
        guardarTodosInput.name = 'guardar_todos';
        guardarTodosInput.value = '1';
        form.appendChild(guardarTodosInput);
        
        // Agregar todos los turnos agrupados por fecha (incluir celdas vacías para eliminar)
        Object.keys(turnosPorFecha).forEach(fecha => {
            Object.keys(turnosPorFecha[fecha]).forEach(codEmpleado => {
                const horarios = turnosPorFecha[fecha][codEmpleado];
                
                // Si hay horarios, crear un input por cada uno
                if (horarios.length > 0) {
                    horarios.forEach((codhorario, index) => {
                        const input = document.createElement('input');
                        input.type = 'hidden';
                        input.name = `turnos_por_fecha[${fecha}][${codEmpleado}][${index}]`;
                        input.value = codhorario;
                        form.appendChild(input);
                    });
                } else {
                    // Si no hay horarios, enviar un input vacío para indicar que se deben eliminar todos
                    const input = document.createElement('input');
                    input.type = 'hidden';
                    input.name = `turnos_por_fecha[${fecha}][${codEmpleado}][0]`;
                    input.value = '';
                    form.appendChild(input);
                }
            });
        });
        
        // Agregar flag de guardar turnos
        const submitInput = document.createElement('input');
        submitInput.type = 'hidden';
        submitInput.name = 'guardar_turnos';
        submitInput.value = '1';
        form.appendChild(submitInput);
        
        document.body.appendChild(form);
        form.submit();
    };
    
    // Auto-guardar al cambiar un select (opcional, puede ser molesto)
    // Descomentar si se desea auto-guardar
    /*
    selects.forEach(select => {
        select.addEventListener('change', function() {
            const fecha = this.dataset.fecha;
            // Guardar después de un pequeño delay para permitir múltiples cambios
            clearTimeout(window.autoSaveTimeout);
            window.autoSaveTimeout = setTimeout(() => {
                guardarTurnosFecha(fecha);
            }, 1000);
        });
    });
    */
});
</script>

<?php
include_once 'includes/footer.php';
?>

