<?php 
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

include_once '../../conexao/index.php';

date_default_timezone_set('Africa/Maputo');

$data_hora = date("Y-m-d H:i:s");

$userID = $_SESSION['idUsuario'] ?? null;
$userNOME = $_SESSION['nomeUsuario'] ?? null;
$userCATE = $_SESSION['categoriaUsuario'] ?? null;

$mesa = $_POST['mesa'] ?? null;
$cliente = $_POST['cliente'] ?? null;
$modo = $_POST['modo'] ?? null;
$valor = $_POST['valor'] ?? null;
$status = 'Aberto';

try {
    // Verificação da sessão
    if (!$userID || !$userNOME || !$userCATE) {
        throw new Exception("Sessão não iniciada corretamente.");
    }

    // Verificação dos parâmetros POST
    if (!$mesa || !$cliente || !$modo || !$valor) {
        throw new Exception("Parâmetros POST ausentes.");
    }

    // Verificação se a conexão com o banco de dados foi estabelecida
    if (!$db) {
        throw new Exception("Falha na conexão com o banco de dados.");
    }

    // Verificação se a consulta foi executada com sucesso
    $sqlBoxx = "SELECT idperiodo FROM periodo WHERE diaperiodo = '$status' AND usuario = '$userID'";
    $rsBoxx = mysqli_query($db, $sqlBoxx);
    if (!$rsBoxx) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }

    // Busca do período
    $periodo = null;
    if (mysqli_num_rows($rsBoxx) > 0) {
        $d = mysqli_fetch_assoc($rsBoxx);
        $periodo = $d['idperiodo'];
    } else {
        throw new Exception("Nenhum período encontrado para o usuário $userID e status $status.");
    }

    // Cálculo do total
    $sqlq = "SELECT SUM(total) as totc, SUM(iva) as iva FROM pos_mesas_temp_artigos WHERE mesa = '$mesa' AND user = '$userID'";
    $rsv = mysqli_query($db, $sqlq);
    if (!$rsv) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }
    
    $dadosx = mysqli_fetch_array($rsv);
    $v = $dadosx['totc'] ?? 0;
    $iva = $dadosx['iva'] ?? 0;
    $sm = $v + $iva;
    $n = "1000000000001";
    if ($valor < $v) {
        echo $n;
        exit;
    }

    // Início da transação
    mysqli_begin_transaction($db);

    // Inserção na tabela pos_mesas
    $sql = "INSERT INTO `pos_mesas`(`descricao`, `pagamento`, `iva`, `modo`, `cliente`, `user`, `periodo`, `mesa`) VALUES('$data_hora', '$v', '$iva', '$modo', '$cliente', '$userID', '$periodo', '$mesa')";
    $rs = mysqli_query($db, $sql);
    if (!$rs) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }

    // Busca do ID inserido
    $idm = mysqli_insert_id($db);
    if (!$idm) {
        throw new Exception("Erro ao obter o ID inserido.");
    }

    // Inserção na tabela pos_mesas_artigos
    $sqlll = "SELECT * FROM pos_mesas_temp_artigos WHERE mesa = '$mesa' AND user = '$userID'";
    $rsss = mysqli_query($db, $sqlll);
    if (!$rsss) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }

    while ($d = mysqli_fetch_assoc($rsss)) {
        $produto = $d['artigo'];
        $qtd = $d['qtd'];
        $preco = $d['preco'];
        $total = $d['total'];
        $iva = $d['iva'];

        $sl = "INSERT INTO `pos_mesas_artigos`(`artigo`, `qtd`, `preco`, `total`, `iva`, `cliente`, `user`, `pos`, `mesa`) VALUES('$produto', '$qtd', '$preco', '$total', '$iva', '$cliente', '$userID', '$idm', '$mesa')";
        $rd = mysqli_query($db, $sl);
        if (!$rd) {
            throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
        }

        // Atualização do estoque
        $sql = "UPDATE produto SET stock = stock - '$qtd' WHERE idproduto = '$produto'";
        $rsA = mysqli_query($db, $sql);
        if (!$rsA) {
            throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
        }
    }

    // Atualização do período
    $sql = "UPDATE periodo SET fechoperiodo = fechoperiodo + '$sm' WHERE idperiodo = '$periodo' AND usuario = '$userID'";
    $rsA = mysqli_query($db, $sql);
    if (!$rsA) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }
    
    // Atualização da mesa
    $sql = "UPDATE mesas SET status = 0 WHERE id = '$mesa'";
    $rsA = mysqli_query($db, $sql);
    if (!$rsA) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }
    

    // Exclusão dos registros da tabela pos_mesas_temp_artigos
    $sql = "DELETE FROM pos_mesas_temp_artigos WHERE mesa = '$mesa' AND user = '$userID'";
    $rsA = mysqli_query($db, $sql);
    if (!$rsA) {
        throw new Exception("Erro ao executar a consulta SQL: " . mysqli_error($db));
    }

    // Confirmação da transação
    mysqli_commit($db);

    // Retorno do ID inserido
    echo $idm;
} catch (Exception $e) {
    mysqli_rollback($db);
    echo "Erro: " . $e->getMessage();
}
?>
