<?php
$pageTitle = 'Editar Usuario';
require_once __DIR__ . '/../../config/config.php';
requireLogin();

if ($_SESSION['rol'] != 'admin') {
    header('Location: ' . SITE_URL);
    exit;
}

$db = getDB();
$modulos = getModulosDisponibles();
$id = intval($_GET['id'] ?? 0);

$stmt = $db->prepare("SELECT * FROM usuarios WHERE id = ?");
$stmt->execute([$id]);
$usuario = $stmt->fetch();

if (!$usuario) {
    showAlert('Usuario no encontrado', 'danger');
    header('Location: list.php');
    exit;
}

// Obtener permisos actuales del usuario
$permisosActuales = getPermisosUsuario($id);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = sanitize($_POST['email']);
    
    // Verificar email único
    $stmt = $db->prepare("SELECT id FROM usuarios WHERE email = ? AND id != ?");
    $stmt->execute([$email, $id]);
    if ($stmt->fetch()) {
        showAlert('El email ya está registrado', 'danger');
    } else {
        try {
            $db->beginTransaction();
            
            // Procesar firma si es laboratorista
            $firma = null;
            $firma_ext = null;
            if ($_POST['rol'] == 'laboratorista' && isset($_FILES['firma']) && $_FILES['firma']['error'] == 0) {
                $allowed = ['png'];
                $ext = strtolower(pathinfo($_FILES['firma']['name'], PATHINFO_EXTENSION));
                if (in_array($ext, $allowed) && $_FILES['firma']['size'] <= 1048576) { // 1MB
                    $firma = file_get_contents($_FILES['firma']['tmp_name']);
                    $firma_ext = $ext;
                }
            }
            
            // Construir query base
            $params = [
                sanitize($_POST['nombre']),
                $email,
                sanitize($_POST['rol']),
                isset($_POST['activo']) ? 1 : 0
            ];
            
            $sql = "UPDATE usuarios SET nombre = ?, email = ?, rol = ?, activo = ?";
            
            // Si se proporciona nueva contraseña
            if (!empty($_POST['password'])) {
                $sql .= ", password = ?";
                $params[] = password_hash($_POST['password'], PASSWORD_DEFAULT);
            }
            
            // Si hay firma nueva
            if ($firma) {
                $sql .= ", firma = ?, firma_extension = ?";
                $params[] = $firma;
                $params[] = $firma_ext;
            }
            
            $sql .= " WHERE id = ?";
            $params[] = $id;
            
            $stmt = $db->prepare($sql);
            $stmt->execute($params);
            
            // Guardar permisos
            $permisos = [];
            foreach ($modulos as $modulo => $info) {
                if (isset($_POST['permiso'][$modulo])) {
                    $permisos[$modulo] = [
                        'ver' => isset($_POST['permiso'][$modulo]['ver']) ? 1 : 0,
                        'crear' => isset($_POST['permiso'][$modulo]['crear']) ? 1 : 0,
                        'editar' => isset($_POST['permiso'][$modulo]['editar']) ? 1 : 0,
                        'eliminar' => isset($_POST['permiso'][$modulo]['eliminar']) ? 1 : 0
                    ];
                }
            }
            guardarPermisosUsuario($id, $permisos);
            
            $db->commit();
            showAlert('Usuario actualizado correctamente');
            header('Location: list.php');
            exit;
        } catch (PDOException $e) {
            $db->rollBack();
            showAlert('Error al actualizar: ' . $e->getMessage(), 'danger');
        }
    }
}

require_once __DIR__ . '/../../includes/header.php';
?>

<div class="d-flex justify-content-between align-items-center mt-4 mb-4">
    <h2><i class="bi bi-pencil"></i> Editar Usuario</h2>
    <a href="list.php" class="btn btn-outline-secondary">
        <i class="bi bi-arrow-left"></i> Volver
    </a>
</div>

<div class="row justify-content-center">
    <div class="col-md-6">
        <div class="card">
            <div class="card-body">
                <form method="POST" enctype="multipart/form-data">
                    <div class="mb-3">
                        <label class="form-label">Nombre Completo *</label>
                        <input type="text" name="nombre" class="form-control" required
                               value="<?= htmlspecialchars($usuario['nombre']) ?>">
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Correo Electrónico *</label>
                        <input type="email" name="email" class="form-control" required
                               value="<?= htmlspecialchars($usuario['email']) ?>">
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Nueva Contraseña</label>
                        <input type="password" name="password" class="form-control" minlength="6">
                        <small class="text-muted">Dejar en blanco para mantener la actual</small>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label">Rol *</label>
                        <select name="rol" class="form-select" id="rol" required>
                            <option value="recepcion" <?= $usuario['rol'] == 'recepcion' ? 'selected' : '' ?>>Recepción</option>
                            <option value="laboratorista" <?= $usuario['rol'] == 'laboratorista' ? 'selected' : '' ?>>Laboratorista</option>
                            <option value="caja" <?= $usuario['rol'] == 'caja' ? 'selected' : '' ?>>Caja</option>
                            <option value="admin" <?= $usuario['rol'] == 'admin' ? 'selected' : '' ?>>Administrador</option>
                        </select>
                    </div>
                    
                    <div class="mb-3" id="firmaSection" style="display: <?= $usuario['rol'] == 'laboratorista' ? 'block' : 'none' ?>;">
                        <label class="form-label">Firma Digital (PNG)</label>
                        <?php if (!empty($usuario['firma'])): ?>
                        <div class="mb-2">
                            <img src="get_firma.php?id=<?= $usuario['id'] ?>" alt="Firma actual" style="max-height: 80px; border: 1px solid #ddd; padding: 5px;" class="img-thumbnail">
                        </div>
                        <?php endif; ?>
                        <input type="file" name="firma" class="form-control" accept="image/png">
                        <small class="text-muted">Solo PNG. Máximo 1MB. Fondo transparente recomendado.</small>
                    </div>
                    
                    <div class="form-check mb-3">
                        <input class="form-check-input" type="checkbox" name="activo" id="activo"
                               <?= $usuario['activo'] ? 'checked' : '' ?>>
                        <label class="form-check-label" for="activo">Usuario Activo</label>
                    </div>
                    
                    <!-- Sección de Permisos -->
                    <div class="card mb-3">
                        <div class="card-header">
                            <i class="bi bi-shield-lock"></i> Permisos de Módulos
                        </div>
                        <div class="card-body">
                            <?php if ($usuario['rol'] == 'admin'): ?>
                            <div class="alert alert-info mb-0">
                                <i class="bi bi-info-circle"></i> Los administradores tienen acceso completo a todos los módulos.
                            </div>
                            <?php else: ?>
                            <small class="text-muted d-block mb-3">
                                <i class="bi bi-info-circle"></i> Configure los permisos específicos para este usuario.
                            </small>
                            <div class="table-responsive">
                                <table class="table table-sm table-bordered">
                                    <thead class="table-light">
                                        <tr>
                                            <th>Módulo</th>
                                            <th class="text-center" style="width: 70px;">Ver</th>
                                            <th class="text-center" style="width: 70px;">Crear</th>
                                            <th class="text-center" style="width: 70px;">Editar</th>
                                            <th class="text-center" style="width: 70px;">Eliminar</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php foreach ($modulos as $modulo => $info): 
                                            if (isset($info['admin_only']) && $info['admin_only']) continue;
                                            $perm = $permisosActuales[$modulo] ?? ['ver' => 0, 'crear' => 0, 'editar' => 0, 'eliminar' => 0];
                                        ?>
                                        <tr>
                                            <td>
                                                <i class="bi <?= $info['icono'] ?>"></i> <?= $info['nombre'] ?>
                                            </td>
                                            <td class="text-center">
                                                <input type="checkbox" class="form-check-input" 
                                                       name="permiso[<?= $modulo ?>][ver]" value="1"
                                                       <?= $perm['ver'] ? 'checked' : '' ?>>
                                            </td>
                                            <td class="text-center">
                                                <input type="checkbox" class="form-check-input" 
                                                       name="permiso[<?= $modulo ?>][crear]" value="1"
                                                       <?= $perm['crear'] ? 'checked' : '' ?>>
                                            </td>
                                            <td class="text-center">
                                                <input type="checkbox" class="form-check-input" 
                                                       name="permiso[<?= $modulo ?>][editar]" value="1"
                                                       <?= $perm['editar'] ? 'checked' : '' ?>>
                                            </td>
                                            <td class="text-center">
                                                <input type="checkbox" class="form-check-input" 
                                                       name="permiso[<?= $modulo ?>][eliminar]" value="1"
                                                       <?= $perm['eliminar'] ? 'checked' : '' ?>>
                                            </td>
                                        </tr>
                                        <?php endforeach; ?>
                                    </tbody>
                                </table>
                            </div>
                            <div class="btn-group btn-group-sm">
                                <button type="button" class="btn btn-outline-primary" onclick="marcarTodos(true)">
                                    Marcar Todos
                                </button>
                                <button type="button" class="btn btn-outline-secondary" onclick="marcarTodos(false)">
                                    Desmarcar Todos
                                </button>
                                <button type="button" class="btn btn-outline-info" onclick="aplicarPermisosRol()">
                                    Aplicar según Rol
                                </button>
                            </div>
                            <?php endif; ?>
                        </div>
                    </div>
                    
                    <div class="d-flex gap-2">
                        <button type="submit" class="btn btn-primary">
                            <i class="bi bi-check-lg"></i> Actualizar
                        </button>
                        <a href="list.php" class="btn btn-outline-secondary">Cancelar</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

<script>
document.getElementById('rol').addEventListener('change', function() {
    document.getElementById('firmaSection').style.display = 
        this.value === 'laboratorista' ? 'block' : 'none';
});

function marcarTodos(estado) {
    document.querySelectorAll('.card-body input[type="checkbox"][name^="permiso"]').forEach(cb => {
        cb.checked = estado;
    });
}

function aplicarPermisosRol() {
    const rol = document.getElementById('rol').value;
    
    // Desmarcar todos primero
    marcarTodos(false);
    
    // Definir permisos según rol
    const permisosPorRol = {
        'laboratorista': {
            'dashboard': ['ver'],
            'resultados': ['ver', 'crear', 'editar'],
            'ordenes': ['ver'],
            'pacientes': ['ver'],
            'examenes': ['ver']
        },
        'recepcion': {
            'dashboard': ['ver'],
            'pacientes': ['ver', 'crear', 'editar'],
            'ordenes': ['ver', 'crear', 'editar'],
            'resultados': ['ver'],
            'examenes': ['ver']
        },
        'caja': {
            'dashboard': ['ver'],
            'caja': ['ver', 'crear', 'editar'],
            'ordenes': ['ver'],
            'pacientes': ['ver']
        }
    };
    
    if (permisosPorRol[rol]) {
        Object.entries(permisosPorRol[rol]).forEach(([modulo, acciones]) => {
            acciones.forEach(accion => {
                const checkbox = document.querySelector(`input[name="permiso[${modulo}][${accion}]"]`);
                if (checkbox) checkbox.checked = true;
            });
        });
    }
}
</script>

<?php require_once __DIR__ . '/../../includes/footer.php'; ?>
