<?php
session_start();
include_once '../../conexao/index.php';
error_reporting(E_ALL);
date_default_timezone_set('Africa/Maputo');
$data_hora = date("Y-m-d H:i:s");

/* Variáveis do Sistema */
$userID = $_SESSION['idUsuario'] ?? null;
$userNOME = $_SESSION['nomeUsuario'] ?? null;
$userCATE = $_SESSION['categoriaUsuario'] ?? null;

if (!isset($_POST['idProduto'])) {
    echo 40; // Parâmetros não enviados
    exit;
}

$idProduto = $_POST['idProduto'];
$status = "Aberto";

// Verifique se o caixa está aberto
$sql = "SELECT diaperiodo FROM periodo WHERE diaperiodo = ? AND usuario = ?";
$stmt = mysqli_prepare($db, $sql);
if (!$stmt) {
    echo "Erro ao preparar consulta: " . mysqli_error($db);
    exit;
}
mysqli_stmt_bind_param($stmt, "ss", $status, $userID);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

if ($result && mysqli_num_rows($result) > 0) {
    // Obtenha informações do produto
    $sql = "SELECT * FROM produto WHERE idproduto = ?";
    $stmt = mysqli_prepare($db, $sql);
    if (!$stmt) {
        echo "Erro ao preparar consulta: " . mysqli_error($db);
        exit;
    }
    mysqli_stmt_bind_param($stmt, "i", $idProduto);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);

    if ($result && mysqli_num_rows($result) > 0) {
        $dados = mysqli_fetch_array($result);
        $stocavel = $dados['stocavel']; // Verifica se o produto é estocável
        $preco = $dados['preco'];
        $iv = $dados['iva'];
        $iva = $iv / 100;

        if ($stocavel == 1) {
            // Produto estocável - segue o fluxo de estoque
            $sql = "SELECT * FROM stock WHERE produto_id = ? AND quantidade > 0 AND estado = 'ativo' ORDER BY prazo ASC, quantidade DESC LIMIT 1";
            $stmt = mysqli_prepare($db, $sql);
            if (!$stmt) {
                echo "Erro ao preparar consulta: " . mysqli_error($db);
                exit;
            }
            mysqli_stmt_bind_param($stmt, "i", $idProduto);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);

            if ($result && mysqli_num_rows($result) > 0) {
                $lote = mysqli_fetch_array($result);
                $stock_qty = $lote['quantidade'];
                $lt = $lote['lote'];

                // Verifique a fila de espera
                $sql = "SELECT * FROM filadeespera WHERE produtofiladeespera = ? AND usuariofiladeespera = ? AND lote = ?";
                $stmt = mysqli_prepare($db, $sql);
                if (!$stmt) {
                    echo "Erro ao preparar consulta: " . mysqli_error($db);
                    exit;
                }
                mysqli_stmt_bind_param($stmt, "iis", $idProduto, $userID, $lt);
                mysqli_stmt_execute($stmt);
                $result = mysqli_stmt_get_result($stmt);

                if ($result && mysqli_num_rows($result) > 0) {
                    $dados1 = mysqli_fetch_array($result);
                    $qtd = $dados1['qtdfiladeespera'];

                    if (($stock_qty - $qtd - 1) < 0) {
                        echo 2; // Estoque insuficiente
                        exit;
                    } else {
                        // Atualize a fila de espera
                        $sql = "UPDATE filadeespera SET qtdfiladeespera = qtdfiladeespera + 1, totalfiladeespera = qtdfiladeespera * precofiladeespera, iva = totalfiladeespera * ? WHERE produtofiladeespera = ? AND usuariofiladeespera = ? AND lote = ?";
                        $stmt = mysqli_prepare($db, $sql);
                        if (!$stmt) {
                            echo "Erro ao preparar consulta: " . mysqli_error($db);
                            exit;
                        }
                        mysqli_stmt_bind_param($stmt, "diis", $iva, $idProduto, $userID, $lt);
                        mysqli_stmt_execute($stmt);
                        echo (mysqli_stmt_affected_rows($stmt) > 0) ? 3 : 31;
                        exit;
                    }
                } else {
                    // Adicione à fila de espera
                    $qt = 1;
                    $totall = $preco * $qt;
                    $ivs = $totall*$iva;
                    $sql = "INSERT INTO filadeespera(produtofiladeespera, qtdfiladeespera, precofiladeespera, totalfiladeespera, iva, usuariofiladeespera, lote) VALUES (?, ?, ?, ?, ?, ?, ?)";
                    $stmt = mysqli_prepare($db, $sql);
                    if (!$stmt) {
                        echo "Erro ao preparar consulta: " . mysqli_error($db);
                        exit;
                    }
                    mysqli_stmt_bind_param($stmt, "iidddis", $idProduto, $qt, $preco, $totall, $ivs, $userID, $lt);
                    echo (mysqli_stmt_execute($stmt)) ? 3 : 31;
                    exit;
                }
            } else {
                echo 7; // Sem estoque ou expirado
                exit;
            }
        } else {
            // Produto não estocável
            $qt = 1;
            $totall = $preco * $qt;

            // Verifique se já existe na fila de espera
            $sql = "SELECT * FROM filadeespera WHERE produtofiladeespera = ? AND usuariofiladeespera = ?";
            $stmt = mysqli_prepare($db, $sql);
            if (!$stmt) {
                echo "Erro ao preparar consulta: " . mysqli_error($db);
                exit;
            }
            mysqli_stmt_bind_param($stmt, "ii", $idProduto, $userID);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);

            if ($result && mysqli_num_rows($result) > 0) {
                // Já existe na fila de espera, atualize os dados
                $dados1 = mysqli_fetch_array($result);
                $qtdAtual = $dados1['qtdfiladeespera'];


                $sql = "UPDATE filadeespera 
                        SET qtdfiladeespera = qtdfiladeespera + 1, 
                            totalfiladeespera = qtdfiladeespera * precofiladeespera, 
                            iva = totalfiladeespera * ? 
                        WHERE produtofiladeespera = ? 
                          AND usuariofiladeespera = ?";
                $stmt = mysqli_prepare($db, $sql);
                if (!$stmt) {
                    echo "Erro ao preparar consulta: " . mysqli_error($db);
                    exit;
                }
                mysqli_stmt_bind_param($stmt, "dii", $iva, $idProduto, $userID);
                echo (mysqli_stmt_execute($stmt)) ? 3 : 31;
                exit;
            } else {
                $ivs = $totall*$iva;
                // Não existe na fila de espera, insira um novo registro
                $sql = "INSERT INTO filadeespera(produtofiladeespera, qtdfiladeespera, precofiladeespera, totalfiladeespera, iva, usuariofiladeespera) 
                        VALUES (?, ?, ?, ?, ?, ?)";
                $stmt = mysqli_prepare($db, $sql);
                if (!$stmt) {
                    echo "Erro ao preparar consulta: " . mysqli_error($db);
                    exit;
                }
                mysqli_stmt_bind_param($stmt, "iidddi", $idProduto, $qt, $preco, $totall, $ivs, $userID);
                echo (mysqli_stmt_execute($stmt)) ? 3 : 31;
                exit;
            }

        }
    } else {
        echo 10; // Produto não encontrado
        exit;
    }
} else {
    echo 1; // Caixa fechado
    exit;
}
?>
