<?php
/**
 * Proxy para API Evolution (WhatsApp)
 * Evita problemas de CORS fazendo requisições server-to-server
 */

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/check-access.php';
require_once __DIR__ . '/../includes/premium-lock.php';

header('Content-Type: application/json');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');

// Verificar autenticação
$userId = $_SESSION['user_id'] ?? null;
$storeId = $_SESSION['store_id'] ?? null;

if (!$userId || !$storeId) {
    http_response_code(401);
    echo json_encode(['error' => 'Não autorizado']);
    exit;
}

// Verificar se tem acesso à feature
if (shouldLockFeature('whatsapp_integration')) {
    http_response_code(403);
    echo json_encode(['error' => 'Recurso não disponível no seu plano']);
    exit;
}

// Configurações da API Evolution
$apiBase = 'https://evo.duolead.com.br';
$apiKey = 'montaloja2025';

// Pegar ação e instância
$action = $_GET['action'] ?? '';
$instance = $_GET['instance'] ?? '';

if (empty($instance)) {
    http_response_code(400);
    echo json_encode(['error' => 'Instância não informada']);
    exit;
}

// Sanitizar nome da instância
$instance = preg_replace('/[^a-zA-Z0-9_-]/', '', $instance);

// Definir endpoint e método baseado na ação
$endpoint = '';
$method = 'GET';
$postData = null;

switch ($action) {
    case 'status':
        $endpoint = "/instance/connectionState/{$instance}";
        break;
    
    case 'create':
        $endpoint = "/instance/create";
        $method = 'POST';
        $postData = json_encode([
            'instanceName' => $instance,
            'qrcode' => true,
            'integration' => 'WHATSAPP-BAILEYS'
        ]);
        break;
    
    case 'connect':
        $endpoint = "/instance/connect/{$instance}";
        break;
    
    case 'disconnect':
        $endpoint = "/instance/logout/{$instance}";
        $method = 'DELETE';
        break;
    
    default:
        http_response_code(400);
        echo json_encode(['error' => 'Ação inválida']);
        exit;
}

// Fazer requisição via cURL
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $apiBase . $endpoint,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'apikey: ' . $apiKey,
        'Content-Type: application/json'
    ],
    CURLOPT_SSL_VERIFYPEER => false
]);

if ($method === 'POST') {
    curl_setopt($ch, CURLOPT_POST, true);
    if ($postData) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    }
} elseif ($method === 'DELETE') {
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
}

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);

if ($error) {
    http_response_code(500);
    echo json_encode(['error' => 'Erro de conexão: ' . $error]);
    exit;
}

http_response_code($httpCode);
echo $response;
