<?php  
include_once "connect.php";
session_start();
header('Content-Type: application/json; charset=utf-8');         
$now = new DateTime("now", new DateTimeZone("Europe/Lisbon"));
$currentDateTime = $now->format("Y-m-d H:i");
$dataSERVER = file_get_contents("../json/data.json");
$dataSERVER = json_decode($dataSERVER);
$TraceStockUsers = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $id = $_POST['id'] ?? null;
    switch ($id) {
        case 'createSession':
            try {
                global $TraceStockUsers;
                $userId = $_POST['user_id'] ?? null;
                
                if (!$userId) {
                    throw new Exception("UserId não fornecido");
                }

                if (!isset($_SESSION['user_id'])) {
                    $_SESSION['user_id'] = $userId;
                }
                $response = [
                    "success" => true,
                    "message" => "Sessão criada com sucesso"
                ];
                echo json_encode($response);
            } catch (Exception $e) {
                $response = [
                    "success" => false,
                    "message" => "Erro no servidor: " . $e->getMessage()
                ];
                echo json_encode($response);
            }
            break;
    }
}

function logoutUser() {
    $_SESSION = [];
    session_destroy();
}

function atualizarConfigJSON($pdo, $utilizador_id, $chave, $valor) {
    $file = "../json/data.json";
    $jsonString = file_get_contents($file);
    $data = json_decode($jsonString, true);

    if ($data === null) {
        throw new Exception("Erro ao ler JSON.");
    }

    $data[$chave] = $valor;

    file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));

    return true;
}

function getDataCompany($chave) {
    $file = "../json/data.json";
    $jsonString = file_get_contents($file);
    $data = json_decode($jsonString, true);

    if ($data === null) {
        throw new Exception("Erro ao ler JSON.");
    }

    $valor = $data["company"][$chave];

    return $valor;
}

function execute($params) {
    $pdo     = $params["db"];      // instância de PDO
    $query   = $params["query"];   // query SQL
    $handler = $params["response"]; // callback (função)

    try {
        $stmt = $pdo->query($query);

        if ($stmt === false) {
            $handler(["error" => "Erro ao executar a query."]);
            return;
        }

        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $handler($data);

    } catch (PDOException $e) {
        $handler(["error" => $e->getMessage()]);
    }
}

function setDataCompany($pdo, $utilizador_id, $chave, $valor) {
    $file = "../json/data.json";
    $jsonString = file_get_contents($file);
    $data = json_decode($jsonString, true);

    if ($data === null) {
        throw new Exception("Erro ao ler JSON.");
    }

    $data["company"][$chave] = $valor;

    file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));

    inserirLog($pdo, $utilizador_id, "ALTERAR_DATA_COMPANY", "Alterou '$chave' da Empresa para '$valor'", true);

    return true;
}

function inserirLog($pdo, $utilizador_id, $acao, $descricao = null, $sucesso = true) {
    // Captura IP e User Agent
    $ip = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';
    $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'Desconhecido';

    // Prepara a query
    $sql = "INSERT INTO logs_sistema 
                (utilizador_id, acao, descricao, ip, user_agent, sucesso) 
            VALUES 
                (:utilizador_id, :acao, :descricao, :ip, :user_agent, :sucesso)";
    
    $stmt = $pdo->prepare($sql);

    // Executa inserção
    $stmt->execute([
        ':utilizador_id' => $utilizador_id,
        ':acao' => $acao,
        ':descricao' => $descricao,
        ':ip' => $ip,
        ':user_agent' => $userAgent,
        ':sucesso' => $sucesso ? 1 : 0
    ]);
}
?>