<?php
/**
 * Auditoría Sigilosa - Sufarma ERP
 */
require_once __DIR__ . '/../config/database.php';

// Auto-migración: crear/recrear tabla con esquema correcto
function auditarMigrar() {
    try {
        $pdo = getDBConnection();
        // Drop old schema table if it exists
        try {
            $cols = $pdo->query("SHOW COLUMNS FROM `auditoria_log`")->fetchAll(PDO::FETCH_COLUMN, 0);
            if (in_array('fecha', $cols) && !in_array('created_at', $cols)) {
                $pdo->exec("DROP TABLE `auditoria_log`");
            }
        } catch (Exception $e) { /* table may not exist yet */ }
        $pdo->exec("CREATE TABLE IF NOT EXISTS `auditoria_log` (
            `id` INT AUTO_INCREMENT PRIMARY KEY,
            `usuario_id` INT NOT NULL,
            `usuario_nombre` VARCHAR(100) DEFAULT NULL,
            `modulo` VARCHAR(50) NOT NULL,
            `accion` VARCHAR(100) NOT NULL,
            `tabla_afectada` VARCHAR(50) DEFAULT NULL,
            `registro_id` INT DEFAULT NULL,
            `detalle` TEXT DEFAULT NULL,
            `ip_address` VARCHAR(45) DEFAULT NULL,
            `user_agent` TEXT DEFAULT NULL,
            `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            INDEX `idx_modulo` (`modulo`),
            INDEX `idx_usuario` (`usuario_id`),
            INDEX `idx_created` (`created_at`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
    } catch (Exception $e) {
        error_log("Error migración auditoría: " . $e->getMessage());
    }
}
auditarMigrar();

/**
 * Registra una acción de auditoría silenciosamente.
 */
function logAudit($modulo, $accion, $tabla = null, $registro_id = null, $detalle_extra = null) {
    global $pdo;
    
    if (!$pdo) {
        require_once __DIR__ . '/../config/database.php';
        $pdo = getDBConnection();
    }
    
    if (session_status() === PHP_SESSION_NONE) session_start();
    $usuario_id = (int)($_SESSION['user_id'] ?? $_SESSION['usuario_id'] ?? 0);
    $usuario_nombre = $_SESSION['user_name'] ?? $_SESSION['usuario_nombre'] ?? $_SESSION['username'] ?? 'Sistema';
    $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? null;
    
    try {
        $stmt = $pdo->prepare("INSERT INTO auditoria_log 
            (usuario_id, usuario_nombre, modulo, accion, tabla_afectada, registro_id, detalle, ip_address, user_agent) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->execute([
            $usuario_id,
            $usuario_nombre,
            $modulo,
            $accion,
            $tabla,
            $registro_id,
            $detalle_extra ? (is_string($detalle_extra) ? $detalle_extra : json_encode($detalle_extra, JSON_UNESCAPED_UNICODE)) : null,
            $ip,
            $ua
        ]);
    } catch (Exception $e) {
        error_log("Error de auditoría: " . $e->getMessage());
    }
}
