<?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_empresa = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
    $stmt_empresa->execute([$_SESSION['user']['codempleado']]);
    $resultado_empresa = $stmt_empresa->fetch(PDO::FETCH_ASSOC);
    if ($resultado_empresa) {
        $codempresaUsuario = $resultado_empresa['codempresa'];
    }
} catch(PDOException $e) {
    $_SESSION['error'] = "❌ Error al obtener la empresa del usuario: " . $e->getMessage();
    $codempresaUsuario = null;
}

// Delete logic
if (isset($_GET['delete'])) {
    $id = $_GET['delete'];
    try {
        // Verificar que el horario pertenezca a la empresa del usuario
        if ($codempresaUsuario) {
            $stmt = $conn->prepare("DELETE FROM thorario_per WHERE codhorario_per = ? AND codempresa = ?");
            $stmt->execute([$id, $codempresaUsuario]);
        } else {
            throw new Exception("No se pudo identificar la empresa del usuario");
        }
        $_SESSION['success'] = "⏰ Horario eliminado correctamente";
    } catch(PDOException $e) {
        $_SESSION['error'] = "❌ Error al eliminar el horario: " . $e->getMessage();
    } catch(Exception $e) {
        $_SESSION['error'] = "❌ " . $e->getMessage();
    }
    header("Location: horarios_personal.php");
    exit();
}

// Insert/Update logic
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $denominacion = trim($_POST['denominacion']);
    $sigla = trim($_POST['sigla']);
    $hora_entrada = $_POST['hora_entrada'];
    $hora_salida = $_POST['hora_salida'];
    $minutos_tolerancia = isset($_POST['minutos_tolerancia']) ? trim($_POST['minutos_tolerancia']) : '';

    if (!$codempresaUsuario) {
        $_SESSION['error'] = "❌ No se pudo identificar la empresa del usuario";
        header("Location: horarios_personal.php");
        exit();
    }

    // Validar y convertir minutos_tolerancia a formato TIME
    $minutos_tolerancia_time = null;
    if ($minutos_tolerancia !== '') {
        $minutos = intval($minutos_tolerancia);
        if ($minutos < 0 || $minutos > 60) {
            $_SESSION['error'] = "❌ Los minutos de tolerancia deben estar entre 0 y 60";
            header("Location: horarios_personal.php" . (isset($_POST['id']) ? "?edit=" . $_POST['id'] : "?create"));
            exit();
        }
        // Convertir minutos a formato TIME (00:MM:00)
        $minutos_tolerancia_time = sprintf('00:%02d:00', $minutos);
    }

    if (isset($_POST['id'])) {
        // Update
        try {
            if (empty($denominacion)) {
                throw new Exception("La denominación es obligatoria");
            }

            // Verificar que el horario pertenezca a la empresa del usuario antes de actualizar
            $stmt = $conn->prepare("UPDATE thorario_per SET 
                    denominacion = ?, sigla = ?, hora_entrada = ?, hora_salida = ?, minutos_tolerancia = ?
                    WHERE codhorario_per = ? AND codempresa = ?");
            $stmt->execute([$denominacion, $sigla, $hora_entrada, $hora_salida, $minutos_tolerancia_time, $_POST['id'], $codempresaUsuario]);
            
            if ($stmt->rowCount() === 0) {
                throw new Exception("No se pudo actualizar el horario. Verifique que pertenezca a su empresa.");
            }
            
            $_SESSION['success'] = "✅ Horario actualizado correctamente";
        } catch(Exception $e) {
            $_SESSION['error'] = "❌ Error al actualizar el horario: " . $e->getMessage();
        }
    } else {
        // Insert
        try {
            if (empty($denominacion)) {
                throw new Exception("La denominación es obligatoria");
            }

            $stmt = $conn->prepare("INSERT INTO thorario_per (denominacion, sigla, hora_entrada, hora_salida, codempresa, minutos_tolerancia) 
                                   VALUES (?, ?, ?, ?, ?, ?)");
            $stmt->execute([$denominacion, $sigla, $hora_entrada, $hora_salida, $codempresaUsuario, $minutos_tolerancia_time]);
            $_SESSION['success'] = "🎉 Horario creado correctamente";
        } catch(Exception $e) {
            $_SESSION['error'] = "❌ Error al crear el horario: " . $e->getMessage();
        }
    }
    header("Location: horarios_personal.php");
    exit();
}

// Edit logic - fetch single record
$editData = null;
if (isset($_GET['edit'])) {
    try {
        if ($codempresaUsuario) {
            $stmt = $conn->prepare("SELECT * FROM thorario_per WHERE codhorario_per = ? AND codempresa = ?");
            $stmt->execute([$_GET['edit'], $codempresaUsuario]);
            $editData = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if (!$editData) {
                $_SESSION['error'] = "❌ Horario no encontrado o no pertenece a su empresa";
            }
        } else {
            $_SESSION['error'] = "❌ No se pudo identificar la empresa del usuario";
        }
    } 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 * FROM thorario_per WHERE 1=1";
    $params = [];
    
    // Filtrar por empresa del usuario logueado
    if ($codempresaUsuario) {
        $query .= " AND codempresa = ?";
        $params[] = $codempresaUsuario;
    } else {
        // Si no hay empresa, no mostrar ningún horario
        $query .= " AND 1=0";
    }
    
    if ($search) {
        $query .= " AND (
            denominacion LIKE ? OR 
            sigla LIKE ? OR 
            hora_entrada LIKE ? OR 
            hora_salida LIKE ?
        )";
        $searchTerm = "%{$search}%";
        $params[] = $searchTerm;
        $params[] = $searchTerm;
        $params[] = $searchTerm;
        $params[] = $searchTerm;
    }
    
    $query .= " ORDER BY denominacion";
    
    $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 = [];
}
?>

<style>
.time-input-group {
    display: flex;
    align-items: center;
    gap: 10px;
}

.time-input-group input[type="time"] {
    flex: 1;
}

.horario-card {
    border-left: 4px solid #667eea;
    transition: all 0.3s ease;
}

.horario-card:hover {
    box-shadow: 0 4px 15px rgba(102, 126, 234, 0.2);
    transform: translateY(-2px);
}
</style>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2>Gestión de Horarios Personal</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 alert-custom">
            <i class="fas fa-check-circle"></i>
            <?php 
            echo $_SESSION['success']; 
            unset($_SESSION['success']);
            ?>
        </div>
    <?php endif; ?>

    <?php if (isset($_SESSION['warning'])): ?>
        <div class="alert alert-warning alert-custom">
            <i class="fas fa-exclamation-triangle"></i>
            <?php 
            echo $_SESSION['warning']; 
            unset($_SESSION['warning']);
            ?>
        </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; ?>

    <?php if (isset($_GET['create']) || isset($_GET['edit'])): ?>
        <!-- Form for create/edit -->
        <div class="card mb-4 horario-card">
            <div class="card-body">
                <h5 class="card-title"><?php echo isset($_GET['edit']) ? 'Editar' : 'Crear' ?> Horario Personal</h5>
                <form method="POST" action="horarios_personal.php">
                    <?php if (isset($_GET['edit'])): ?>
                        <input type="hidden" name="id" value="<?php echo $editData['codhorario_per']; ?>">
                    <?php endif; ?>
                    
                    <div class="row">
                        <div class="col-md-4 mb-3">
                            <label class="form-label">
                                <i class="fas fa-tag"></i> Denominación *
                            </label>
                            <input type="text" class="form-control" name="denominacion" maxlength="50"
                                   placeholder="Ej: Turno Vendedor, Turno Promotor, Turno Administrativo"
                                   value="<?php echo $editData ? htmlspecialchars($editData['denominacion']) : ''; ?>" required>
                        </div>
                        
                        <div class="col-md-2 mb-3">
                            <label class="form-label">
                                <i class="fas fa-font"></i> Sigla
                            </label>
                            <input type="text" class="form-control" name="sigla" maxlength="2"
                                   placeholder="Ej: TV, TP, TA"
                                   value="<?php echo $editData ? htmlspecialchars($editData['sigla']) : ''; ?>">
                            <small class="text-muted">Máximo 2 caracteres</small>
                        </div>
                    </div>

                    <div class="row">
                        <div class="col-md-2 mb-4">
                            <label class="form-label">
                                <i class="fas fa-clock"></i> Hora de Entrada *
                            </label>
                            <input type="time" class="form-control" name="hora_entrada"
                                   value="<?php echo $editData ? date('H:i', strtotime($editData['hora_entrada'])) : ''; ?>" required>
                        </div>
                        
                        <div class="col-md-2 mb-4">
                            <label class="form-label">
                                <i class="fas fa-clock"></i> Hora de Salida *
                            </label>
                            <input type="time" class="form-control" name="hora_salida"
                                   value="<?php echo $editData ? date('H:i', strtotime($editData['hora_salida'])) : ''; ?>" required>
                        </div>
                    
                        <div class="col-md-2 mb-4">
                            <label class="form-label">
                                <i class="fas fa-hourglass-half"></i> Minutos de Tolerancia
                            </label>
                            <input type="number" class="form-control" name="minutos_tolerancia" 
                                   min="0" max="60" step="1"
                                   placeholder="Minutos (0-60)"
                                   value="<?php 
                                       if ($editData && $editData['minutos_tolerancia']) {
                                           // Convertir TIME a minutos: extraer minutos del formato 00:MM:00
                                           $time = $editData['minutos_tolerancia'];
                                           $parts = explode(':', $time);
                                           echo intval($parts[1]);
                                       }
                                   ?>">
                            <small class="text-muted">Minutos de tolerancia permitidos (0-60 minutos)</small>
                        </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_personal.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_personal.php" class="row g-3">
                    <div class="col-md-8">
                        <input type="text" class="form-control" name="search" 
                               placeholder="Buscar por denominación, hora de entrada o hora de salida..."
                               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_personal.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><i class="fas fa-hashtag"></i> ID</th>
                            <th><i class="fas fa-tag"></i> Denominación</th>
                            <th><i class="fas fa-font"></i> Sigla</th>
                            <th><i class="fas fa-clock"></i> Hora Entrada</th>
                            <th><i class="fas fa-clock"></i> Hora Salida</th>
                            <th><i class="fas fa-hourglass-half"></i> Duración</th>
                            <th><i class="fas fa-stopwatch"></i> Tolerancia</th>
                            <th><i class="fas fa-cogs"></i> Acciones</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (empty($horarios)): ?>
                            <tr>
                                <td colspan="8" class="text-center text-muted">
                                    <i class="fas fa-inbox"></i> No se encontraron horarios
                                </td>
                            </tr>
                        <?php else: ?>
                            <?php foreach ($horarios as $horario): ?>
                                <?php
                                // Calcular duración
                                $entrada = new DateTime($horario['hora_entrada']);
                                $salida = new DateTime($horario['hora_salida']);
                                // Si la salida es menor que la entrada, asumimos que es al día siguiente
                                if ($salida < $entrada) {
                                    $salida->modify('+1 day');
                                }
                                $duracion = $entrada->diff($salida);
                                $horas = $duracion->h;
                                $minutos = $duracion->i;
                                ?>
                                <tr>
                                    <td>
                                        <span class="badge bg-primary rounded-pill"><?php echo $horario['codhorario_per']; ?></span>
                                    </td>
                                    <td>
                                        <strong><?php echo htmlspecialchars($horario['denominacion']); ?></strong>
                                    </td>
                                    <td>
                                        <?php if ($horario['sigla']): ?>
                                            <span class="badge bg-secondary rounded-pill"><?php echo htmlspecialchars($horario['sigla']); ?></span>
                                        <?php else: ?>
                                            <span class="text-muted">-</span>
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <i class="fas fa-arrow-right text-success"></i>
                                        <strong><?php echo date('H:i', strtotime($horario['hora_entrada'])); ?></strong>
                                    </td>
                                    <td>
                                        <i class="fas fa-arrow-left text-danger"></i>
                                        <strong><?php echo date('H:i', strtotime($horario['hora_salida'])); ?></strong>
                                    </td>
                                    <td>
                                        <span class="badge bg-info rounded-pill">
                                            <?php echo $horas . 'h ' . $minutos . 'm'; ?>
                                        </span>
                                    </td>
                                    <td>
                                        <?php 
                                        if ($horario['minutos_tolerancia']) {
                                            // Convertir TIME a minutos
                                            $time = $horario['minutos_tolerancia'];
                                            $parts = explode(':', $time);
                                            $minutos_tol = intval($parts[1]);
                                            echo '<span class="badge bg-warning rounded-pill">' . $minutos_tol . ' min</span>';
                                        } else {
                                            echo '<span class="text-muted">-</span>';
                                        }
                                        ?>
                                    </td>
                                    <td>
                                        <div class="btn-group" role="group">
                                            <a href="?edit=<?php echo $horario['codhorario_per']; ?>" 
                                               class="btn btn-sm btn-warning" 
                                               title="Editar">
                                                <i class="fas fa-edit"></i>
                                            </a>
                                            <a href="?delete=<?php echo $horario['codhorario_per']; ?>" 
                                               class="btn btn-sm btn-danger"
                                               onclick="return confirm('¿Está seguro de eliminar el horario \'<?php echo htmlspecialchars($horario['denominacion']); ?>\'?')"
                                               title="Eliminar">
                                                <i class="fas fa-trash"></i>
                                            </a>
                                        </div>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    <?php endif; ?>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Form validation
    const form = document.querySelector('form[method="POST"]');
    if (form) {
        form.addEventListener('submit', function(e) {
            const denominacion = form.querySelector('input[name="denominacion"]').value.trim();
            const horaEntrada = form.querySelector('input[name="hora_entrada"]').value;
            const horaSalida = form.querySelector('input[name="hora_salida"]').value;
            
            if (!denominacion) {
                e.preventDefault();
                alert('La denominación es obligatoria');
                return false;
            }
            
            if (!horaEntrada || !horaSalida) {
                e.preventDefault();
                alert('Las horas de entrada y salida son obligatorias');
                return false;
            }
            
            // Validar minutos de tolerancia
            const minutosToleranciaInput = form.querySelector('input[name="minutos_tolerancia"]');
            if (minutosToleranciaInput && minutosToleranciaInput.value !== '') {
                const minutosTol = parseInt(minutosToleranciaInput.value);
                if (isNaN(minutosTol) || minutosTol < 0 || minutosTol > 60) {
                    e.preventDefault();
                    alert('Los minutos de tolerancia deben estar entre 0 y 60');
                    return false;
                }
            }
            
            // Validar que la hora de salida sea posterior a la de entrada
            // (o permitir turnos nocturnos que cruzan medianoche)
            const entrada = new Date('2000-01-01T' + horaEntrada);
            const salida = new Date('2000-01-01T' + horaSalida);
            
            // Si la salida es menor que la entrada, asumimos turno nocturno (válido)
            // Solo validamos que no sean iguales
            if (horaEntrada === horaSalida) {
                e.preventDefault();
                alert('La hora de entrada y salida no pueden ser iguales');
                return false;
            }
        });
    }
    
    // Validación en tiempo real de horas
    const horaEntradaInput = document.querySelector('input[name="hora_entrada"]');
    const horaSalidaInput = document.querySelector('input[name="hora_salida"]');
    
    if (horaEntradaInput && horaSalidaInput) {
        function validarHoras() {
            const entrada = horaEntradaInput.value;
            const salida = horaSalidaInput.value;
            
            if (entrada && salida && entrada === salida) {
                horaSalidaInput.setCustomValidity('La hora de salida debe ser diferente a la de entrada');
            } else {
                horaSalidaInput.setCustomValidity('');
            }
        }
        
        horaEntradaInput.addEventListener('change', validarHoras);
        horaSalidaInput.addEventListener('change', validarHoras);
    }
    
    // Validación en tiempo real de minutos de tolerancia
    const minutosToleranciaInput = document.querySelector('input[name="minutos_tolerancia"]');
    if (minutosToleranciaInput) {
        minutosToleranciaInput.addEventListener('input', function() {
            const valor = parseInt(this.value);
            if (this.value !== '' && (isNaN(valor) || valor < 0 || valor > 60)) {
                this.setCustomValidity('Los minutos de tolerancia deben estar entre 0 y 60');
            } else {
                this.setCustomValidity('');
            }
        });
    }
});
</script>

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

