<?php
// Conexão com o banco de dados
require __DIR__ . '/config_db.php'; // Ajuste o caminho conforme a estrutura do projeto

// Verificar se o produto_id foi passado
if (isset($_GET['produto_id'])) {
    $produto_id = $_GET['produto_id'];

    // Consultar o produto pelo ID
    $sql = "SELECT * FROM produtos WHERE id = :produto_id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(['produto_id' => $produto_id]);
    $produto = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($produto) {
        // Iniciar a estrutura de resposta com os dados do produto principal
        $response = [
            'id' => $produto['id'],
            'title' => $produto['nome'],
            'description' => $produto['descricao'],
            'unit_price' => (float) $produto['preco_atual'],
            'preco_original' => (float) $produto['preco_original'],
            'imagem' => $produto['imagem']
        ];

        // Buscar produtos adicionais (com base no ID do produto principal)
        $sql_adicionais = "SELECT pa.*, p.nome, p.preco_atual, p.imagem 
                           FROM produtos_adicionais pa
                           JOIN produtos p ON p.id = pa.produto_adicional_id
                           WHERE pa.produto_principal_id = :produto_principal_id";
        $stmt_adicionais = $pdo->prepare($sql_adicionais);
        $stmt_adicionais->execute(['produto_principal_id' => $produto_id]);
        $produtos_adicionais = $stmt_adicionais->fetchAll(PDO::FETCH_ASSOC);

        // Variável para somar o valor dos produtos adicionais
        $total_adicionais = 0;

        // Se houver produtos adicionais, adicioná-los à resposta e calcular o total dos adicionais
        if (!empty($produtos_adicionais)) {
            $response['produtos_adicionais'] = array_map(function ($item) use (&$total_adicionais) {
                $preco = (float) $item['preco_atual'];
                $total_adicionais += $preco;
                return [
                    'id' => $item['id'],
                    'title' => $item['nome'],
                    'unit_price' => $preco,
                    'imagem' => $item['imagem']
                ];
            }, $produtos_adicionais);
        }

        // Adicionar o total dos produtos adicionais ao response
        $response['total_adicionais'] = $total_adicionais;
        $response['valor_total_com_adicionais'] = $response['unit_price'] + $total_adicionais;

        // Verificar se há uma categoria associada ao produto para buscar produtos relacionados
        if (!empty($produto['categoria_id'])) {
            // Consultar produtos relacionados (mesma categoria, por exemplo)
            $sql_relacionados = "SELECT * FROM produtos WHERE categoria_id = :categoria_id AND id != :produto_id LIMIT 5";
            $stmt_relacionados = $pdo->prepare($sql_relacionados);
            $stmt_relacionados->execute([
                'categoria_id' => $produto['categoria_id'],
                'produto_id' => $produto_id
            ]);
            $produtos_relacionados = $stmt_relacionados->fetchAll(PDO::FETCH_ASSOC);

            // Se houver produtos relacionados, adicioná-los à resposta
            if (!empty($produtos_relacionados)) {
                $response['produtos_relacionados'] = array_map(function ($item) {
                    return [
                        'id' => $item['id'],
                        'title' => $item['nome'],
                        'unit_price' => (float) $item['preco_atual'],
                        'imagem' => $item['imagem']
                    ];
                }, $produtos_relacionados);
            }
        }

        // Retornar a resposta JSON com ou sem produtos adicionais e relacionados, conforme o caso
        echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
    } else {
        // Produto não encontrado
        echo json_encode(['error' => 'Produto não encontrado.']);
    }
} else {
    // Erro ao não passar produto_id
    echo json_encode(['error' => 'Produto ID não fornecido.']);
}
