<?php
// Incluindo o arquivo de configuração do banco de dados
include_once __DIR__ . '/../config/config_db.php';

class Adicionais {

  private $pdo;

  public function __construct($pdo) {
    $this->pdo = $pdo;
  }

  // Função para obter os produtos adicionais disponíveis para o checkout
  public function obterAdicionaisPorFormaPagamento($forma_pagamento) {
    try {
      // Consulta para obter os produtos adicionais com base na forma de pagamento
      $sql = "SELECT * FROM produtos_adicionais WHERE forma_pagamento = :forma_pagamento";
      $stmt = $this->pdo->prepare($sql);
      $stmt->bindParam(':forma_pagamento', $forma_pagamento);
      $stmt->execute();
      return $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
      error_log("Erro ao obter adicionais por forma de pagamento: " . $e->getMessage());
      return [];
    }
  }

  // Função para obter todos os adicionais disponíveis
  public function obterTodosAdicionais() {
    try {
      // Consulta para obter todos os produtos adicionais
      $sql = "SELECT * FROM produtos_adicionais";
      $stmt = $this->pdo->query($sql);
      return $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
      error_log("Erro ao obter todos os adicionais: " . $e->getMessage());
      return [];
    }
  }

  // Função para calcular o total de um pedido com adicionais
  public function calcularTotalComAdicionais($valorProdutoPrincipal, $adicionaisSelecionados) {
    $total = $valorProdutoPrincipal;

    foreach ($adicionaisSelecionados as $adicional) {
      $total += $adicional['unit_price'];
    }

    // Log do total calculado para depuração
    error_log("Total calculado com adicionais: " . $total);
    return $total;
  }

  // Função para salvar os adicionais no banco de dados
  public function salvarAdicionaisSelecionados($pedidoId, $adicionaisSelecionados) {
    try {
      foreach ($adicionaisSelecionados as $adicional) {
        // Log de cada adicional a ser inserido
        error_log("Salvando adicional - Pedido ID: " . $pedidoId . ", Adicional ID: " . $adicional['id'] . ", Quantidade: " . $adicional['quantidade']);

        $sql = "INSERT INTO pedidos_adicionais (pedido_id, adicional_id, quantidade) VALUES (:pedido_id, :adicional_id, :quantidade)";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindParam(':pedido_id', $pedidoId);
        $stmt->bindParam(':adicional_id', $adicional['id']);
        $stmt->bindParam(':quantidade', $adicional['quantidade']);
        $stmt->execute();
      }
      return true;
    } catch (PDOException $e) {
      error_log("Erro ao salvar adicionais selecionados: " . $e->getMessage());
      return false;
    }
  }
}

// Inicializando a classe de produtos adicionais
$adicionais = new Adicionais($pdo);

// Verifica se a forma de pagamento foi passada via GET e retorna os adicionais correspondentes
if (isset($_GET['forma_pagamento'])) {
  $forma_pagamento = $_GET['forma_pagamento'];
  $adicionaisDisponiveis = $adicionais->obterAdicionaisPorFormaPagamento($forma_pagamento);

  echo json_encode([
    'status' => 'success',
    'adicionais' => $adicionaisDisponiveis
  ]);
} else {
  // Retorna todos os adicionais caso não tenha uma forma de pagamento específica
  $todosAdicionais = $adicionais->obterTodosAdicionais();
  echo json_encode([
    'status' => 'success',
    'adicionais' => $todosAdicionais
  ]);
}
?>
