<?php
// Incluir la configuración de la conexión
include('../config/conexion.php');

// Verificar conexión
if ($conexion->connect_error) {
    die("Conexión fallida: " . $conexion->connect_error);
}

// Obtener datos del formulario
$idUsuario = isset($_POST['id']) ? intval($_POST['id']) : 0;
$nombre = isset($_POST['nombre']) ? trim($_POST['nombre']) : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$password = isset($_POST['password']) ? trim($_POST['password']) : '';
$rol = isset($_POST['rol']) ? intval($_POST['rol']) : 0;
$estado = isset($_POST['estado']) ? trim($_POST['estado']) : 'Desactivado';

// Verificar que los campos no estén vacíos
if (empty($nombre) || empty($email) || $rol <= 0) {
    die("Todos los campos son obligatorios.");
}

// Verificar si el email ya existe en la base de datos (excepto el actual)
$stmt = $conexion->prepare("SELECT id FROM usuarios WHERE email = ? AND id != ?");
$stmt->bind_param("si", $email, $idUsuario);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows > 0) {
    // Si el email ya existe, mostrar mensaje
    echo "<script>alert('El email ya está registrado.'); window.history.back();</script>";
} else {
    // Actualizar el usuario
    // Iniciar la consulta base para actualizar
    $updateQuery = "UPDATE usuarios SET nombre = ?, email = ?, rol_id = ?, estado = ?";

    // Inicializar un arreglo para los tipos y parámetros
    $params = [$nombre, $email, $rol, $estado];
    $types = "ssds"; // ssds -> string, string, double (int), string

    // Solo agregar la contraseña si se ha proporcionado
    if (!empty($password)) {
        // Si se proporciona una nueva contraseña, agregar a la consulta
        $updateQuery .= ", password = ?";
        $params[] = $password; // Agregar la nueva contraseña al arreglo
        $types .= "s"; // Agregar un 's' al tipo de la contraseña
    }

    $updateQuery .= " WHERE id = ?";
    $params[] = $idUsuario; // Agregar el ID del usuario al final del arreglo
    $types .= "i"; // Agregar un 'i' para el ID del usuario (int)

    // Preparar la declaración con la consulta completa
    $stmt = $conexion->prepare($updateQuery);

    // Usar call_user_func_array para enlazar los parámetros dinámicamente
    $stmt->bind_param($types, ...$params);

    if ($stmt->execute()) {
        // Redirigir a la página de usuarios con un mensaje de éxito
        echo "<script>alert('Usuario actualizado correctamente.'); window.location.href='../iniciousuario.php';</script>";
    } else {
        // Mostrar error en caso de fallo al actualizar
        echo "Error al actualizar el usuario: " . $stmt->error;
    }
}

// Cerrar la conexión
$stmt->close();
$conexion->close();
