<?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();
}

// Delete logic
if (isset($_GET['delete'])) {
    $id = $_GET['delete'];
    try {
        // Verificar que el empleado a eliminar pertenece a la misma empresa
        $stmt = $conn->prepare("SELECT codempleado FROM templeado WHERE codempleado = ? AND codempresa = ?");
        $stmt->execute([$id, $codempresaUsuario]);
        $empleadoExiste = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$empleadoExiste) {
            $_SESSION['error'] = "No tiene permisos para eliminar este empleado";
        } else {
            $stmt = $conn->prepare("DELETE FROM templeado WHERE codempleado = ?");
            $stmt->execute([$id]);
            $_SESSION['success'] = "Empleado eliminado correctamente";
        }
    } catch(PDOException $e) {
        $_SESSION['error'] = "Error al eliminar el empleado: " . $e->getMessage();
    }
    header("Location: empleados.php");
    exit();
}

// Insert/Update logic
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $apellidoPaterno = $_POST['apellidoPaterno'];
    $apellidoMaterno = $_POST['apellidoMaterno'];
    $nombres = $_POST['nombres'];
    $nroDocumento = $_POST['nroDocumento'];
    $fechaNacimiento = $_POST['fechaNacimiento'];
    $nroCelular = $_POST['nroCelular'];
    $codTipoDocumento = $_POST['codTipoDocumento'];
    $sexo = $_POST['sexo'];
    $email = $_POST['email'];
    $codtipohorario = $_POST['codtipohorario'];
    // Para nuevos usuarios, usar la empresa del usuario logueado
    $codempresa = isset($_POST['id']) ? $_POST['codempresa'] : $codempresaUsuario;
    $fechaDigitacion = date('Y-m-d H:i:s');
    $codempleadocrea = $_SESSION['user']['codempleado'];

    // Handle password - using MD5 instead of password_hash
    $clave = !empty($_POST['clave']) ? md5($_POST['clave']) : null;

    // Handle file upload
    $foto = '';
    if (isset($_FILES['foto']) && $_FILES['foto']['error'] == 0) {
        $target_dir = "uploads/";
        $foto = time() . '_' . basename($_FILES["foto"]["name"]);
        $target_file = $target_dir . $foto;
        
        if (move_uploaded_file($_FILES["foto"]["tmp_name"], $target_file)) {
            $foto = $target_file;
        }
    }
    
    if (isset($_POST['id'])) {
        // Update
        try {
            // Ensure tipo de horario is selected
            if (empty($_POST['codtipohorario'])) {
                throw new Exception("Debe seleccionar un tipo de horario");
            }
            
            $sql = "UPDATE templeado SET 
                    apellidoPaterno = ?, apellidoMaterno = ?, nombres = ?,
                    nroDocumento = ?, fechaNacimiento = ?, nroCelular = ?,
                    codTipoDocumento = ?, sexo = ?, email = ?, codtipohorario = ?,
                    codempresa = ?, fechaDigitacion = ?";
            
            $params = [$apellidoPaterno, $apellidoMaterno, $nombres,
                      $nroDocumento, $fechaNacimiento, $nroCelular,
                      $codTipoDocumento, $sexo, $email, $codtipohorario, 
                      $codempresa, $fechaDigitacion];

            // Add password to update if provided
            if ($clave) {
                $sql .= ", clave = ?";
                $params[] = $clave;
            }

            if ($foto) {
                $sql .= ", foto = ?";
                $params[] = $foto;
            }

            $sql .= " WHERE codempleado = ?";
            $params[] = $_POST['id'];

            $stmt = $conn->prepare($sql);
            $stmt->execute($params);
            $_SESSION['success'] = "Empleado actualizado correctamente";
        } catch(PDOException $e) {
            $_SESSION['error'] = "Error al actualizar el empleado: " . $e->getMessage();
        } catch(Exception $e) {
            $_SESSION['error'] = $e->getMessage();
        }
    } else {
        // Insert
        try {
            // Ensure password is provided for new employees
            if (empty($_POST['clave'])) {
                throw new Exception("La contraseña es obligatoria para nuevos empleados");
            }
            
            // Ensure tipo de horario is selected
            if (empty($_POST['codtipohorario'])) {
                throw new Exception("Debe seleccionar un tipo de horario");
            }
            
            // La empresa se asigna automáticamente del usuario logueado

            $stmt = $conn->prepare("INSERT INTO templeado (apellidoPaterno, apellidoMaterno, 
                                   nombres, nroDocumento, fechaNacimiento, nroCelular,
                                   codTipoDocumento, sexo, email, foto, codtipohorario,
                                   codempresa, codempleadocrea, fechaDigitacion, clave) 
                                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
            $stmt->execute([$apellidoPaterno, $apellidoMaterno, $nombres,
                          $nroDocumento, $fechaNacimiento, $nroCelular,
                          $codTipoDocumento, $sexo, $email, $foto, $codtipohorario,
                          $codempresa, $codempleadocrea, $fechaDigitacion, $clave]);
            $_SESSION['success'] = "Empleado creado correctamente";
        } catch(Exception $e) {
            $_SESSION['error'] = "Error al crear el empleado: " . $e->getMessage();
        }
    }
    header("Location: empleados.php");
    exit();
}

// Edit logic - fetch single record
$editData = null;
if (isset($_GET['edit'])) {
    try {
        // Verificar que el empleado a editar pertenece a la misma empresa
        $stmt = $conn->prepare("SELECT * FROM templeado WHERE codempleado = ? AND codempresa = ?");
        $stmt->execute([$_GET['edit'], $codempresaUsuario]);
        $editData = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$editData) {
            $_SESSION['error'] = "No tiene permisos para editar este empleado";
            header("Location: empleados.php");
            exit();
        }
    } catch(PDOException $e) {
        $_SESSION['error'] = "Error al obtener el empleado: " . $e->getMessage();
    }
}

// Fetch all records with search
try {
    $search = isset($_GET['search']) ? trim($_GET['search']) : '';
    
    $query = "SELECT e.*, c.nombres as creador_nombre, th.tipohorario, emp.nomempresa
              FROM templeado e
              LEFT JOIN templeado c ON e.codempleadocrea = c.codempleado 
              LEFT JOIN tipohorario th ON e.codtipohorario = th.codtipohorario
              LEFT JOIN tempresa emp ON e.codempresa = emp.codempresa
              WHERE 1=1";
    
    $params = [];
    
    // Filtrar por empresa del usuario logueado
    if ($codempresaUsuario) {
        $query .= " AND e.codempresa = ?";
        $params[] = $codempresaUsuario;
    }
    
    if ($search) {
        $query .= " AND (
            CONCAT(e.apellidoPaterno, ' ', e.apellidoMaterno, ' ', e.nombres) LIKE ?
            OR e.nroDocumento LIKE ?
        )";
        $searchTerm = "%{$search}%";
        $params[] = $searchTerm;
        $params[] = $searchTerm;
    }
    
    $query .= " ORDER BY e.apellidoPaterno, e.apellidoMaterno";
    
    $stmt = $conn->prepare($query);
    $stmt->execute($params);
    $empleados = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $_SESSION['error'] = "Error al obtener los datos: " . $e->getMessage();
    $empleados = [];
}

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

// Fetch empresas para el formulario
try {
    $stmt = $conn->prepare("SELECT * FROM tempresa ORDER BY nomempresa");
    $stmt->execute();
    $empresas = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    $empresas = [];
}
?>

<div class="col-md-10 p-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2>Gestión de Usuarios</h2>
        <?php if (!isset($_GET['edit']) && !isset($_GET['create'])): ?>
            <a href="?create" class="btn btn-primary">
                <i class="fas fa-plus"></i> Nuevo Usuario
            </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' ?> Usuario</h5>
                <form method="POST" action="empleados.php" enctype="multipart/form-data">
                    <?php if (isset($_GET['edit'])): ?>
                        <input type="hidden" name="id" value="<?php echo $editData['codempleado']; ?>">
                    <?php endif; ?>
                    
                    <div class="row">
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Apellido Paterno</label>
                            <input type="text" class="form-control" name="apellidoPaterno" maxlength="250"
                                   value="<?php echo $editData ? $editData['apellidoPaterno'] : ''; ?>" required>
                        </div>
                        
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Apellido Materno</label>
                            <input type="text" class="form-control" name="apellidoMaterno" maxlength="250"
                                   value="<?php echo $editData ? $editData['apellidoMaterno'] : ''; ?>" required>
                        </div>

                        <div class="col-md-4 mb-3">
                            <label class="form-label">Nombres</label>
                            <input type="text" class="form-control" name="nombres" maxlength="250"
                                   value="<?php echo $editData ? $editData['nombres'] : ''; ?>" required>
                        </div>
                    </div>

                    <div class="row">
                        <div class="col-md-2 mb-3">
                            <label class="form-label">Tipo Documento</label>
                            <select class="form-control" name="codTipoDocumento" required>
                                <option value="1" <?php echo ($editData && $editData['codTipoDocumento'] == 1) ? 'selected' : ''; ?>>DNI</option>
                                <option value="2" <?php echo ($editData && $editData['codTipoDocumento'] == 2) ? 'selected' : ''; ?>>Pasaporte</option>
                                <option value="3" <?php echo ($editData && $editData['codTipoDocumento'] == 3) ? 'selected' : ''; ?>>Carnet Extranjería</option>
                            </select>
                        </div>

                        <div class="col-md-2 mb-3">
                            <label class="form-label">Número Documento</label>
                            <input type="text" class="form-control" name="nroDocumento" maxlength="50"
                                   value="<?php echo $editData ? $editData['nroDocumento'] : ''; ?>" required>
                        </div>

                        <div class="col-md-2 mb-3">
                            <label class="form-label">Fecha Nacimiento</label>
                            <input type="date" class="form-control" name="fechaNacimiento"
                                   value="<?php echo $editData ? date('Y-m-d', strtotime($editData['fechaNacimiento'])) : ''; ?>" required>
                        </div>

                        <div class="col-md-2 mb-3">
                            <label class="form-label">Número Celular</label>
                            <input type="text" class="form-control" name="nroCelular" maxlength="50"
                                   value="<?php echo $editData ? $editData['nroCelular'] : ''; ?>">
                        </div>

                        <div class="col-md-2 mb-3">
                            <label class="form-label">Sexo</label>
                            <select class="form-control" name="sexo" required>
                                <option value="M" <?php echo ($editData && $editData['sexo'] == 'M') ? 'selected' : ''; ?>>Masculino</option>
                                <option value="F" <?php echo ($editData && $editData['sexo'] == 'F') ? 'selected' : ''; ?>>Femenino</option>
                            </select>
                        </div>

                        <div class="col-md-2 mb-3">
                            <label class="form-label">Email</label>
                            <input type="email" class="form-control" name="email" maxlength="250"
                                   value="<?php echo $editData ? $editData['email'] : ''; ?>">
                        </div>
                    </div>

                    <div class="row">
                        <div class="col-md-4 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>
                        
                        <?php if (isset($_GET['edit'])): ?>
                        <!-- Campo oculto para mantener la empresa del empleado -->
                        <input type="hidden" name="codempresa" value="<?php echo $editData['codempresa']; ?>">
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Empresa</label>
                            <input type="text" class="form-control" value="<?php 
                                // Mostrar el nombre de la empresa del empleado
                                $stmt_empresa_nombre_edit = $conn->prepare("SELECT nomempresa FROM tempresa WHERE codempresa = ?");
                                $stmt_empresa_nombre_edit->execute([$editData['codempresa']]);
                                $empresa_nombre_edit = $stmt_empresa_nombre_edit->fetch(PDO::FETCH_ASSOC);
                                echo $empresa_nombre_edit ? $empresa_nombre_edit['nomempresa'] : 'Empresa no encontrada';
                            ?>" readonly>
                            <div class="form-text">La empresa no puede ser modificada.</div>
                        </div>
                        <?php else: ?>
                        <!-- Campo oculto para asignar automáticamente la empresa del usuario logueado -->
                        <input type="hidden" name="codempresa" value="<?php echo $codempresaUsuario; ?>">
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Empresa</label>
                            <input type="text" class="form-control" value="<?php 
                                // Mostrar el nombre de la empresa del usuario logueado
                                $stmt_empresa_nombre = $conn->prepare("SELECT nomempresa FROM tempresa WHERE codempresa = ?");
                                $stmt_empresa_nombre->execute([$codempresaUsuario]);
                                $empresa_nombre = $stmt_empresa_nombre->fetch(PDO::FETCH_ASSOC);
                                echo $empresa_nombre ? $empresa_nombre['nomempresa'] : 'Empresa del usuario';
                            ?>" readonly>
                            <div class="form-text">Se asignará automáticamente la empresa del usuario logueado.</div>
                        </div>
                        <?php endif; ?>
                        
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Contraseña <?php echo !isset($_GET['edit']) ? '*' : '(dejar en blanco para mantener la actual)'; ?></label>
                            <input type="password" class="form-control" name="clave" 
                                   <?php echo !isset($_GET['edit']) ? 'required' : ''; ?>>
                            <?php if (isset($_GET['edit'])): ?>
                                <div class="form-text">Solo llene este campo si desea cambiar la contraseña.</div>
                            <?php endif; ?>
                        </div>
                    </div>

                    <div class="mb-3">
                        <label class="form-label">Foto</label>
                        <input type="file" class="form-control" name="foto" accept="image/*">
                        <?php if ($editData && $editData['foto']): ?>
                            <div class="mt-2">
                                <img src="<?php echo $editData['foto']; ?>" alt="Foto actual" style="max-width: 200px;">
                            </div>
                        <?php endif; ?>
                    </div>

                    <div class="d-flex gap-2">
                        <button type="submit" class="btn btn-primary">
                            <i class="fas fa-save"></i> Guardar
                        </button>
                        <a href="empleados.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="empleados.php" class="row g-3">
                    <div class="col-md-8">
                        <input type="text" class="form-control" name="search" 
                               placeholder="Buscar por nombre completo o número de documento..."
                               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="empleados.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>Foto</th>
                                <th>Nombre Completo</th>
                                <th>Documento</th>
                                <th>Celular</th>
                                <th>Email</th>
                                <th>Fecha Nacimiento</th>
                                <th>Sexo</th>
                                <th>Tipo de Horario</th>
                                <th>Empresa</th>
                                <th>Acciones</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($empleados as $empleado): ?>
                                <tr>
                                    <td><?php echo $empleado['codempleado']; ?></td>
                                    <td>
                                        <?php if ($empleado['foto']): ?>
                                            <img src="<?php echo $empleado['foto']; ?>" alt="Foto" style="width: 50px; height: 50px; object-fit: cover;">
                                        <?php else: ?>
                                            <div style="width: 50px; height: 50px; background-color: #f8f9fa; display: flex; align-items: center; justify-content: center; border-radius: 5px;">
                                                <i class="fas fa-user" style="color: #6c757d;"></i>
                                            </div>
                                        <?php endif; ?>
                                    </td>
                                    <td><?php echo $empleado['apellidoPaterno'] . ' ' . $empleado['apellidoMaterno'] . ', ' . $empleado['nombres']; ?></td>
                                    <td><?php echo $empleado['nroDocumento']; ?></td>
                                    <td><?php echo $empleado['nroCelular'] ?: '-'; ?></td>
                                    <td><?php echo $empleado['email'] ?: '-'; ?></td>
                                    <td><?php echo $empleado['fechaNacimiento'] ? date('d/m/Y', strtotime($empleado['fechaNacimiento'])) : '-'; ?></td>
                                    <td><?php echo $empleado['sexo'] == 'M' ? 'Masculino' : 'Femenino'; ?></td>
                                    <td><?php echo $empleado['tipohorario'] ?: '-'; ?></td>
                                    <td><?php echo $empleado['nomempresa'] ?: '-'; ?></td>
                                    <td>
                                        <a href="?edit=<?php echo $empleado['codempleado']; ?>" class="btn btn-sm btn-warning">
                                            <i class="fas fa-edit"></i>
                                        </a>
                                        <a href="?delete=<?php echo $empleado['codempleado']; ?>" 
                                        class="btn btn-sm btn-danger"
                                           onclick="return confirm('¿Está seguro de eliminar este empleado?')">
                                            <i class="fas fa-trash"></i>
                                        </a>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    <?php endif; ?>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var nroDocumentoInput = document.querySelector('input[name="nroDocumento"]');
    var form = document.querySelector('form[method="POST"]');
    var btnGuardar = form.querySelector('button[type="submit"]');
    var mensaje = document.createElement('div');
    mensaje.className = 'text-danger mt-1';
    mensaje.style.display = 'none';
    nroDocumentoInput.parentNode.appendChild(mensaje);

    var ultimoValor = '';
    nroDocumentoInput.addEventListener('input', function() {
        var nroDocumento = nroDocumentoInput.value.trim();
        if (nroDocumento.length === 0) {
            mensaje.style.display = 'none';
            btnGuardar.disabled = false;
            return;
        }
        // Solo validar en modo crear
        <?php if (!isset($_GET['edit'])): ?>
        if (nroDocumento === ultimoValor) return;
        ultimoValor = nroDocumento;
        fetch('ajax/verificar_documento_empleado.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            body: new URLSearchParams({ nroDocumento: nroDocumento })
        })
        .then(response => response.json())
        .then(data => {
            if (data.exists) {
                mensaje.textContent = 'El empleado con este número de documento ya existe.';
                mensaje.style.display = 'block';
                btnGuardar.disabled = true;
            } else {
                mensaje.style.display = 'none';
                btnGuardar.disabled = false;
            }
        });
        <?php endif; ?>
    });

    // Validar que se seleccione un tipo de horario
    var tipoHorarioSelect = document.querySelector('select[name="codtipohorario"]');
    if (tipoHorarioSelect) {
        tipoHorarioSelect.addEventListener('change', function() {
            if (this.value === '') {
                this.setCustomValidity('Debe seleccionar un tipo de horario');
            } else {
                this.setCustomValidity('');
            }
        });
    }
    
});
</script>

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