#!/bin/bash

# 🔗 Script de teste para integração BFF ↔ Laravel API
# 
# Este script testa todos os endpoints de integração com a API Laravel

set -e

BASE_URL="http://localhost:3333"
API_KEY="JOqyUcP45H875xmuI2gT3H9dDK42I2Wt"

# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}🔗 Testando Integração BFF ↔ Laravel API${NC}"
echo "=========================================="
echo

# Função para fazer requisições
make_request() {
    local method=$1
    local endpoint=$2
    local token=$3
    local data=$4
    local description=$5
    
    echo -e "${YELLOW}📡 $description${NC}"
    echo "   $method $endpoint"
    
    if [ -z "$token" ]; then
        # Sem token
        if [ -z "$data" ]; then
            curl -s -X "$method" "$BASE_URL$endpoint" \
                -H "x-api-key: $API_KEY" \
                -H "Content-Type: application/json" | jq .
        else
            curl -s -X "$method" "$BASE_URL$endpoint" \
                -H "x-api-key: $API_KEY" \
                -H "Content-Type: application/json" \
                -d "$data" | jq .
        fi
    else
        # Com token
        if [ -z "$data" ]; then
            curl -s -X "$method" "$BASE_URL$endpoint" \
                -H "Authorization: Bearer $token" \
                -H "x-api-key: $API_KEY" \
                -H "Content-Type: application/json" | jq .
        else
            curl -s -X "$method" "$BASE_URL$endpoint" \
                -H "Authorization: Bearer $token" \
                -H "x-api-key: $API_KEY" \
                -H "Content-Type: application/json" \
                -d "$data" | jq .
        fi
    fi
    
    echo
}

# 1. Health check básico
echo -e "${GREEN}1. Health Check${NC}"
make_request "GET" "/auth/health" "" "" "Health check básico"

# 2. Teste com token (você precisa fornecer um token válido)
echo -e "${GREEN}2. Testes com Token${NC}"
echo -e "${RED}⚠️  Para os próximos testes, você precisa de um token JWT válido da API Laravel${NC}"
echo "   Obtenha um token fazendo login na API Laravel:"
echo "   curl -X POST http://localhost:8000/api/login -d '{\"email\":\"user@example.com\",\"password\":\"password\"}'"
echo

read -p "Cole seu token JWT aqui (ou pressione Enter para pular): " JWT_TOKEN

if [ -n "$JWT_TOKEN" ]; then
    echo -e "${GREEN}✅ Token fornecido, executando testes...${NC}"
    echo
    
    # Debug do token
    echo -e "${GREEN}3. Debug do Token${NC}"
    make_request "GET" "/auth/token/debug" "$JWT_TOKEN" "" "Debug completo do token"
    
    # Compatibilidade Laravel
    echo -e "${GREEN}4. Compatibilidade Laravel${NC}"
    make_request "GET" "/auth/laravel/compatibility" "$JWT_TOKEN" "" "Verificar compatibilidade com Laravel"
    
    # Health check da integração
    echo -e "${GREEN}5. Health Check da Integração${NC}"
    make_request "GET" "/laravel-api/health" "$JWT_TOKEN" "" "Health check da integração Laravel"
    
    # Validação com Laravel
    echo -e "${GREEN}6. Validação com Laravel${NC}"
    make_request "POST" "/laravel-api/validate-token" "$JWT_TOKEN" "" "Validar token com Laravel API"
    
    # Perfil do usuário
    echo -e "${GREEN}7. Perfil do Usuário${NC}"
    make_request "GET" "/laravel-api/user/profile" "$JWT_TOKEN" "" "Buscar perfil do usuário"
    
    # Teste de proxy
    echo -e "${GREEN}8. Teste de Proxy${NC}"
    PROXY_DATA='{"method": "GET", "params": {}, "headers": {}}'
    make_request "POST" "/laravel-api/proxy/api/user" "$JWT_TOKEN" "$PROXY_DATA" "Proxy para endpoint /api/user"
    
    # Debug de campos do token
    echo -e "${GREEN}9. Debug de Campos${NC}"
    make_request "GET" "/laravel-api/debug/token" "$JWT_TOKEN" "" "Debug de todos os campos do token"
    
else
    echo -e "${YELLOW}⚠️  Testes com token pulados (token não fornecido)${NC}"
fi

echo
echo -e "${BLUE}✅ Testes concluídos!${NC}"
echo
echo -e "${YELLOW}📝 Endpoints disponíveis:${NC}"
echo "   GET  /auth/health                    - Health check básico"
echo "   GET  /auth/token/debug               - Debug do token (requer auth)"
echo "   GET  /auth/laravel/compatibility     - Compatibilidade Laravel (requer auth)"
echo "   GET  /laravel-api/health             - Health check integração (requer auth)"
echo "   POST /laravel-api/validate-token     - Validar token com Laravel (requer auth)"
echo "   GET  /laravel-api/user/profile       - Perfil do usuário (requer auth user)"
echo "   GET  /laravel-api/client/profile     - Perfil do client (requer auth client)"
echo "   POST /laravel-api/proxy/*            - Proxy genérico (requer auth)"
echo "   GET  /laravel-api/debug/token        - Debug completo (requer auth)"
echo
echo -e "${GREEN}🎯 A integração está pronta para uso!${NC}"
