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

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

// Delete logic
if (isset($_GET['delete'])) {
    $codtipohorario = $_GET['delete'];
    try {
        $stmt = $conn->prepare("DELETE FROM thorario WHERE codtipohorario = ?");
        $stmt->execute([$codtipohorario]);
        $_SESSION['success'] = "Horario eliminado correctamente";
    } catch(PDOException $e) {
        $_SESSION['error'] = "Error al eliminar el horario: " . $e->getMessage();
    }
    header("Location: horarios.php");
    exit();
}

// Insert/Update logic
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $codtipohorario = $_POST['codtipohorario'];
    $diasSeleccionados = isset($_POST['dias_seleccionados']) ? $_POST['dias_seleccionados'] : [];
    $diasHorarios = isset($_POST['dias_horarios']) ? $_POST['dias_horarios'] : [];
    
    if (isset($_POST['id'])) {
        // Update
        try {
            // Primero eliminar registros existentes para este tipo de horario
            $stmt = $conn->prepare("DELETE FROM thorario WHERE codtipohorario = ?");
            $stmt->execute([$codtipohorario]);
            
            // Insertar nuevos registros solo para los días seleccionados
            foreach ($diasSeleccionados as $coddiasemana) {
                if (isset($diasHorarios[$coddiasemana]) && 
                    !empty($diasHorarios[$coddiasemana]['horainicio']) && 
                    !empty($diasHorarios[$coddiasemana]['horafinal'])) {
                    $stmt = $conn->prepare("INSERT INTO thorario (codtipohorario, horainicio, horafinal, coddiasemana) VALUES (?, ?, ?, ?)");
                    $stmt->execute([$codtipohorario, $diasHorarios[$coddiasemana]['horainicio'], $diasHorarios[$coddiasemana]['horafinal'], $coddiasemana]);
                }
            }
            $_SESSION['success'] = "Horario actualizado correctamente";
        } catch(PDOException $e) {
            $_SESSION['error'] = "Error al actualizar el horario: " . $e->getMessage();
        }
    } else {
        // Insert
        try {
            foreach ($diasSeleccionados as $coddiasemana) {
                if (isset($diasHorarios[$coddiasemana]) && 
                    !empty($diasHorarios[$coddiasemana]['horainicio']) && 
                    !empty($diasHorarios[$coddiasemana]['horafinal'])) {
                    $stmt = $conn->prepare("INSERT INTO thorario (codtipohorario, horainicio, horafinal, coddiasemana) VALUES (?, ?, ?, ?)");
                    $stmt->execute([$codtipohorario, $diasHorarios[$coddiasemana]['horainicio'], $diasHorarios[$coddiasemana]['horafinal'], $coddiasemana]);
                }
            }
            $_SESSION['success'] = "Horario creado correctamente";
        } catch(PDOException $e) {
            $_SESSION['error'] = "Error al crear el horario: " . $e->getMessage();
        }
    }
    header("Location: horarios.php");
    exit();
}

// Edit logic - fetch single record
$editData = null;
$editDiasHorarios = [];
if (isset($_GET['edit'])) {
    try {
        $codtipohorario = $_GET['edit'];
        
        // Obtener información del tipo de horario
        $stmt = $conn->prepare("SELECT * FROM tipohorario WHERE codtipohorario = ?");
        $stmt->execute([$codtipohorario]);
        $editData = $stmt->fetch(PDO::FETCH_ASSOC);
        
        // Obtener todos los días y horarios para este tipo de horario
        $stmt = $conn->prepare("SELECT * FROM thorario WHERE codtipohorario = ?");
        $stmt->execute([$codtipohorario]);
        $horariosExistentes = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        foreach ($horariosExistentes as $horario) {
            $editDiasHorarios[$horario['coddiasemana']] = [
                'horainicio' => $horario['horainicio'],
                'horafinal' => $horario['horafinal']
            ];
        }
    } catch(PDOException $e) {
        $_SESSION['error'] = "Error al obtener el horario: " . $e->getMessage();
    }
}

// Fetch all records with search
try {
    $search = isset($_GET['search']) ? trim($_GET['search']) : '';
    
    $query = "SELECT DISTINCT h.codtipohorario, 
                     th.tipohorario,
                     GROUP_CONCAT(CONCAT(d.diasemana, ' (', h.horainicio, '-', h.horafinal, ')') ORDER BY d.coddiasemana SEPARATOR ', ') as dias_horarios,
                     COUNT(DISTINCT h.coddiasemana) as total_dias
              FROM thorario h
              LEFT JOIN tipohorario th ON h.codtipohorario = th.codtipohorario
              LEFT JOIN tdiasemana d ON h.coddiasemana = d.coddiasemana 
              WHERE 1=1";
    
    $params = [];
    if ($search) {
        $query .= " AND (
            th.tipohorario LIKE ?
            OR d.diasemana LIKE ?
        )";
        $searchTerm = "%{$search}%";
        $params = [$searchTerm, $searchTerm];
    }
    
    $query .= " GROUP BY h.codtipohorario
                ORDER BY th.tipohorario";
    
    $stmt = $conn->prepare($query);
    $stmt->execute($params);
    $horarios = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $_SESSION['error'] = "Error al obtener los datos: " . $e->getMessage();
    $horarios = [];
}

// Fetch tipos de horario
try {
    $stmt = $conn->prepare("SELECT * FROM tipohorario ORDER BY tipohorario");
    $stmt->execute();
    $tiposHorario = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $tiposHorario = [];
}

// Fetch días de la semana
try {
    $stmt = $conn->prepare("SELECT * FROM tdiasemana ORDER BY coddiasemana");
    $stmt->execute();
    $diasSemana = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $diasSemana = [];
}
?>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2>Gestión de Horarios</h2>
        <?php if (!isset($_GET['edit']) && !isset($_GET['create'])): ?>
            <a href="?create" class="btn btn-primary">
                <i class="fas fa-plus"></i> Nuevo Horario
            </a>
        <?php endif; ?>
    </div>

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

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

    <?php if (isset($_GET['create']) || isset($_GET['edit'])): ?>
        <!-- Form for create/edit -->
        <div class="card mb-4">
            <div class="card-body">
                <h5 class="card-title"><?php echo isset($_GET['edit']) ? 'Editar' : 'Crear' ?> Horario</h5>
                <form method="POST" action="horarios.php">
                    <?php if (isset($_GET['edit'])): ?>
                        <input type="hidden" name="id" value="<?php echo $editData['codtipohorario']; ?>">
                    <?php endif; ?>
                    
                    <div class="row">
                        <div class="col-md-6 mb-3">
                            <label class="form-label">Tipo de Horario</label>
                            <select class="form-control" name="codtipohorario" required>
                                <option value="">Seleccione un tipo de horario</option>
                                <?php foreach ($tiposHorario as $tipo): ?>
                                    <option value="<?php echo $tipo['codtipohorario']; ?>" 
                                            <?php echo ($editData && $editData['codtipohorario'] == $tipo['codtipohorario']) ? 'selected' : ''; ?>>
                                        <?php echo $tipo['tipohorario']; ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <div class="mb-3">
                        <label class="form-label">Configuración de Horarios por Día</label>
                        <div class="row">
                            <?php foreach ($diasSemana as $dia): ?>
                                <div class="col-md-6 mb-3">
                                    <div class="card">
                                        <div class="card-body">
                                                                                         <div class="form-check mb-2">
                                                 <input class="form-check-input dia-checkbox" type="checkbox" 
                                                        id="dia_<?php echo $dia['coddiasemana']; ?>"
                                                        name="dias_seleccionados[]"
                                                        value="<?php echo $dia['coddiasemana']; ?>"
                                                        data-dia="<?php echo $dia['coddiasemana']; ?>">
                                                 <label class="form-check-label fw-bold" for="dia_<?php echo $dia['coddiasemana']; ?>">
                                                     <?php echo $dia['diasemana']; ?>
                                                 </label>
                                             </div>
                                            
                                                                                         <div class="row horario-fields" id="horario_<?php echo $dia['coddiasemana']; ?>" style="display: none;">
                                                 <div class="col-md-3">
                                                     <label class="form-label">Hora de Inicio</label>
                                                     <input type="time" class="form-control" 
                                                            name="dias_horarios[<?php echo $dia['coddiasemana']; ?>][horainicio]"
                                                            value="<?php echo isset($editDiasHorarios[$dia['coddiasemana']]) ? $editDiasHorarios[$dia['coddiasemana']]['horainicio'] : '07:00'; ?>">
                                                 </div>
                                                 <div class="col-md-3">
                                                     <label class="form-label">Hora de Fin</label>
                                                     <input type="time" class="form-control" 
                                                            name="dias_horarios[<?php echo $dia['coddiasemana']; ?>][horafinal]"
                                                            value="<?php echo isset($editDiasHorarios[$dia['coddiasemana']]) ? $editDiasHorarios[$dia['coddiasemana']]['horafinal'] : '19:00'; ?>">
                                                 </div>
                                             </div>
                                        </div>
                                    </div>
                                </div>
                            <?php endforeach; ?>
                        </div>
                    </div>

                    <div class="d-flex gap-2">
                        <button type="submit" class="btn btn-primary">
                            <i class="fas fa-save"></i> Guardar
                        </button>
                        <a href="horarios.php" class="btn btn-secondary">
                            <i class="fas fa-times"></i> Cancelar
                        </a>
                    </div>
                </form>
            </div>
        </div>
    <?php else: ?>
        <!-- Search form -->
        <div class="card mb-4">
            <div class="card-body">
                <form method="GET" action="horarios.php" class="row g-3">
                    <div class="col-md-8">
                        <input type="text" class="form-control" name="search" 
                               placeholder="Buscar por tipo de horario o día de la semana..."
                               value="<?php echo isset($_GET['search']) ? htmlspecialchars($_GET['search']) : ''; ?>">
                    </div>
                    <div class="col-md-4">
                        <button type="submit" class="btn btn-primary">
                            <i class="fas fa-search"></i> Buscar
                        </button>
                        <?php if (isset($_GET['search'])): ?>
                            <a href="horarios.php" class="btn btn-secondary">
                                <i class="fas fa-times"></i> Limpiar
                            </a>
                        <?php endif; ?>
                    </div>
                </form>
            </div>
        </div>

        <!-- List of records -->
        <div class="card">
            <div class="card-body">
                <div class="table-responsive">
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th>ID</th>
                                <th>Tipo de Horario</th>
                                <th>Días y Horarios</th>
                                <th>Total Días</th>
                                <th>Acciones</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($horarios as $horario): ?>
                                <tr>
                                    <td><?php echo $horario['codtipohorario']; ?></td>
                                    <td><?php echo $horario['tipohorario']; ?></td>
                                    <td><?php echo $horario['dias_horarios']; ?></td>
                                    <td><?php echo $horario['total_dias']; ?></td>
                                    <td>
                                        <a href="?edit=<?php echo $horario['codtipohorario']; ?>" class="btn btn-sm btn-warning">
                                            <i class="fas fa-edit"></i>
                                        </a>
                                        <a href="?delete=<?php echo $horario['codtipohorario']; ?>" 
                                        class="btn btn-sm btn-danger"
                                           onclick="return confirm('¿Está seguro de eliminar este horario?')">
                                            <i class="fas fa-trash"></i>
                                        </a>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    <?php endif; ?>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Función para mostrar/ocultar campos de horario según el checkbox
    function toggleHorarioFields(checkbox) {
        const diaId = checkbox.getAttribute('data-dia');
        const horarioFields = document.getElementById('horario_' + diaId);
        const horaInicio = horarioFields.querySelector('input[name*="[horainicio]"]');
        const horaFin = horarioFields.querySelector('input[name*="[horafinal]"]');
        
        if (checkbox.checked) {
            horarioFields.style.display = 'block';
            horaInicio.required = true;
            horaFin.required = true;
            // Establecer valores por defecto si están vacíos
            if (!horaInicio.value) {
                horaInicio.value = '07:00';
            }
            if (!horaFin.value) {
                horaFin.value = '19:00';
            }
        } else {
            horarioFields.style.display = 'none';
            horaInicio.required = false;
            horaFin.required = false;
            horaInicio.value = '';
            horaFin.value = '';
        }
    }

    // Agregar event listeners a todos los checkboxes
    document.querySelectorAll('.dia-checkbox').forEach(function(checkbox) {
        checkbox.addEventListener('change', function() {
            toggleHorarioFields(this);
        });
        
        // Si estamos en modo edición, marcar los checkboxes que tienen datos
        <?php if (isset($_GET['edit']) && !empty($editDiasHorarios)): ?>
        const diaId = checkbox.getAttribute('data-dia');
        if (<?php echo json_encode(array_keys($editDiasHorarios)); ?>.includes(parseInt(diaId))) {
            checkbox.checked = true;
            toggleHorarioFields(checkbox);
        }
        <?php endif; ?>
    });

    // Validar que al menos un día esté seleccionado
    var form = document.querySelector('form[method="POST"]');
    if (form) {
        form.addEventListener('submit', function(e) {
            var checkboxes = form.querySelectorAll('.dia-checkbox:checked');
            if (checkboxes.length === 0) {
                e.preventDefault();
                alert('Debe seleccionar al menos un día de la semana.');
                return false;
            }

            // Validar que los días seleccionados tengan horarios completos
            var isValid = true;
            checkboxes.forEach(function(checkbox) {
                const diaId = checkbox.getAttribute('data-dia');
                const horarioFields = document.getElementById('horario_' + diaId);
                const horaInicio = horarioFields.querySelector('input[name*="[horainicio]"]');
                const horaFin = horarioFields.querySelector('input[name*="[horafinal]"]');
                
                if (!horaInicio.value || !horaFin.value) {
                    isValid = false;
                    return;
                }
                
                if (horaInicio.value >= horaFin.value) {
                    isValid = false;
                    horaFin.setCustomValidity('La hora de fin debe ser mayor que la hora de inicio');
                    return;
                } else {
                    horaFin.setCustomValidity('');
                }
            });

            if (!isValid) {
                e.preventDefault();
                alert('Todos los días seleccionados deben tener horarios válidos (hora de fin mayor que hora de inicio).');
                return false;
            }
        });
    }

    // Validar que la hora de fin sea mayor que la hora de inicio
    document.querySelectorAll('input[type="time"]').forEach(function(input) {
        input.addEventListener('change', function() {
            const horarioFields = this.closest('.horario-fields');
            if (horarioFields) {
                const horaInicio = horarioFields.querySelector('input[name*="[horainicio]"]');
                const horaFin = horarioFields.querySelector('input[name*="[horafinal]"]');
                
                if (horaInicio.value && horaFin.value) {
                    if (horaInicio.value >= horaFin.value) {
                        horaFin.setCustomValidity('La hora de fin debe ser mayor que la hora de inicio');
                    } else {
                        horaFin.setCustomValidity('');
                    }
                }
            }
        });
    });
});
</script>

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