<?php
session_start();
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/system_logger.php';

header('Content-Type: application/json');

$logger = SystemLogger::getInstance();

// Verificar autenticación y permisos
if (!isset($_SESSION['user_id']) || strtolower($_SESSION['rol']) !== 'administrador') {
    $logger->warning('Intento de gestión de usuarios sin permisos', 'Usuario: ' . ($_SESSION['usuario'] ?? 'N/A') . ', Rol: ' . ($_SESSION['rol'] ?? 'N/A'));
    http_response_code(403);
    echo json_encode(['success' => false, 'error' => 'No tienes permisos para esta acción']);
    exit;
}

try {
    $id = $_POST['id'] ?? null;
    $usuario = trim($_POST['usuario'] ?? '');
    $rol = $_POST['rol'] ?? 'Digitador';
    $password = $_POST['password'] ?? '';

    if (empty($usuario) || empty($rol)) {
        throw new Exception('El nombre de usuario y el rol son obligatorios.');
    }

    if ($id) {
        // --- ACTUALIZAR USUARIO ---
        if (!empty($password)) {
            // Si se proporciona una nueva contraseña, actualizarla
            $hashed_password = password_hash($password, PASSWORD_DEFAULT);
            $sql = "UPDATE usuarios SET usuario = ?, rol = ?, password = ? WHERE id = ?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$usuario, $rol, $hashed_password, $id]);

            $logger->data('Usuario actualizado con nueva contraseña', "ID: $id, Usuario: $usuario, Rol: $rol");
        } else {
            // Si no se proporciona contraseña, no cambiarla
            $sql = "UPDATE usuarios SET usuario = ?, rol = ? WHERE id = ?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$usuario, $rol, $id]);

            $logger->data('Usuario actualizado', "ID: $id, Usuario: $usuario, Rol: $rol");
        }
    } else {
        // --- CREAR NUEVO USUARIO ---
        if (empty($password)) {
            throw new Exception('La contraseña es obligatoria para un nuevo usuario.');
        }
        // Verificar si el usuario ya existe
        $stmt = $pdo->prepare("SELECT id FROM usuarios WHERE usuario = ?");
        $stmt->execute([$usuario]);
        if ($stmt->fetch()) {
            $logger->warning('Intento de crear usuario duplicado', "Usuario: $usuario ya existe");
            throw new Exception('El nombre de usuario ya está en uso.');
        }
        $hashed_password = password_hash($password, PASSWORD_DEFAULT);
        $sql = "INSERT INTO usuarios (usuario, rol, password, creado_en) VALUES (?, ?, ?, NOW())";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$usuario, $rol, $hashed_password]);

        $nuevo_id = $pdo->lastInsertId();
        $logger->data('Nuevo usuario creado', "ID: $nuevo_id, Usuario: $usuario, Rol: $rol");
    }
    echo json_encode(['success' => true]);
} catch (Throwable $e) {
    $logger->error('Error en gestión de usuarios', "Error: " . $e->getMessage() . ", Usuario: " . ($usuario ?? 'N/A'));
    http_response_code(400); // Bad Request
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
