<?php
session_start();
header('Content-Type: application/json; charset=utf-8');

require_once 'conexao.php';

// Validar autenticação
if (!isset($_SESSION['cliente_id'])) {
    http_response_code(401);
    echo json_encode(['success' => false, 'error' => 'Usuário não autenticado']);
    exit;
}

$clienteId = $_SESSION['cliente_id'];
$tenant_id = $_SESSION['tenant_id'] ?? $clienteId;

// Verificar método HTTP
$method = $_SERVER['REQUEST_METHOD'];

if ($method === 'POST') {
    // Ler dados JSON
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    // Se não for JSON, tentar ler como POST normal
    if (!$data && !empty($_POST)) {
        $data = $_POST;
    }

    if (!$data || empty($data)) {
        echo json_encode(['success' => false, 'error' => 'Dados não recebidos']);
        exit;
    }

    try {
        // Verificar se já existe configuração
        $stmt = $pdo->prepare("SELECT id FROM whatsapp_config WHERE tenant_id = ? AND ativo = 1");
        $stmt->execute([$tenant_id]);
        $existing = $stmt->fetch();
        
        $access_token = $data['access_token'] ?? '';
        $phone_number_id = $data['phone_number_id'] ?? '';
        $business_account_id = $data['business_account_id'] ?? '';
        $webhook_verify_token = $data['webhook_verify_token'] ?? 'whatsapp_webhook_token';
        
        if ($existing) {
            // Atualizar
            $stmt = $pdo->prepare("UPDATE whatsapp_config SET 
                access_token = ?, 
                phone_number_id = ?,
                business_account_id = ?,
                webhook_verify_token = ?,
                updated_at = NOW(),
                ativo = 1
                WHERE tenant_id = ?");
            
            $stmt->execute([
                $access_token,
                $phone_number_id,
                $business_account_id,
                $webhook_verify_token,
                $tenant_id
            ]);
        } else {
            // Inserir novo
            $stmt = $pdo->prepare("INSERT INTO whatsapp_config 
                (tenant_id, access_token, phone_number_id, business_account_id, webhook_verify_token, ativo, created_at) 
                VALUES (?, ?, ?, ?, ?, 1, NOW())");
            
            $stmt->execute([
                $tenant_id,
                $access_token,
                $phone_number_id,
                $business_account_id,
                $webhook_verify_token
            ]);
        }
        
        echo json_encode([
            'success' => true, 
            'message' => 'Configuração salva com sucesso!',
            'data' => [
                'tenant_id' => $tenant_id,
                'phone_number_id' => $phone_number_id,
                'business_account_id' => $business_account_id
            ]
        ]);
        
    } catch (Exception $e) {
        error_log("Erro ao salvar configuração WhatsApp: " . $e->getMessage());
        echo json_encode(['success' => false, 'error' => 'Erro: ' . $e->getMessage()]);
    }
    
} elseif ($method === 'GET') {
    // Buscar configuração
    try {
        $stmt = $pdo->prepare("SELECT * FROM whatsapp_config WHERE tenant_id = ? AND ativo = 1");
        $stmt->execute([$tenant_id]);
        $config = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($config) {
            // Ocultar token para segurança
            $config['access_token_masked'] = str_repeat('*', strlen($config['access_token']));
            unset($config['access_token']);
            
            echo json_encode([
                'success' => true, 
                'connected' => true,
                'config' => $config
            ]);
        } else {
            echo json_encode([
                'success' => true, 
                'connected' => false,
                'message' => 'WhatsApp não configurado'
            ]);
        }
        
    } catch (Exception $e) {
        error_log("Erro ao buscar configuração: " . $e->getMessage());
        echo json_encode(['success' => false, 'error' => 'Erro: ' . $e->getMessage()]);
    }
    
} elseif ($method === 'DELETE') {
    // Desconectar WhatsApp
    try {
        $stmt = $pdo->prepare("UPDATE whatsapp_config SET ativo = 0, updated_at = NOW() WHERE tenant_id = ?");
        $stmt->execute([$tenant_id]);
        
        echo json_encode([
            'success' => true, 
            'message' => 'WhatsApp desconectado com sucesso!'
        ]);
        
    } catch (Exception $e) {
        error_log("Erro ao desconectar WhatsApp: " . $e->getMessage());
        echo json_encode(['success' => false, 'error' => 'Erro: ' . $e->getMessage()]);
    }
    
} elseif ($method === 'PUT') {
    // Testar conexão
    parse_str(file_get_contents("php://input"), $data);
    $action = $data['action'] ?? '';
    
    if ($action === 'test') {
        try {
            $stmt = $pdo->prepare("SELECT * FROM whatsapp_config WHERE tenant_id = ? AND ativo = 1");
            $stmt->execute([$tenant_id]);
            $config = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if ($config && !empty($config['access_token']) && !empty($config['phone_number_id'])) {
                // Testar conexão com API do WhatsApp
                $url = "https://graph.facebook.com/v17.0/{$config['phone_number_id']}?fields=verified_name";
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_HTTPHEADER, [
                    'Authorization: Bearer ' . $config['access_token'],
                    'Content-Type: application/json'
                ]);
                curl_setopt($ch, CURLOPT_TIMEOUT, 10);
                
                $response = curl_exec($ch);
                $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                $error = curl_error($ch);
                curl_close($ch);
                
                if ($httpCode === 200) {
                    $data = json_decode($response, true);
                    echo json_encode([
                        'success' => true,
                        'connected' => true,
                        'message' => 'Conexão bem-sucedida!',
                        'data' => $data
                    ]);
                } else {
                    echo json_encode([
                        'success' => false,
                        'connected' => false,
                        'error' => 'Falha na conexão. Código HTTP: ' . $httpCode,
                        'response' => $response
                    ]);
                }
            } else {
                echo json_encode([
                    'success' => false,
                    'connected' => false,
                    'error' => 'Configuração incompleta'
                ]);
            }
            
        } catch (Exception $e) {
            echo json_encode([
                'success' => false,
                'error' => 'Erro: ' . $e->getMessage()
            ]);
        }
    } else {
        echo json_encode(['success' => false, 'error' => 'Ação inválida']);
    }
    
} else {
    http_response_code(405);
    echo json_encode(['success' => false, 'error' => 'Método não permitido']);
}
?>