#!/bin/bash
# Exemplos PG-API usando cURL
# 
# Uso:
#   export API_KEY="sk_dev_123456789"
#   export BASE_URL="http://localhost:8580"
#   bash curl_examples.sh

set -e

# Configurações
API_KEY="${API_KEY:-sk_dev_123456789}"
BASE_URL="${BASE_URL:-http://localhost:8580}"

echo "========================================"
echo "  PG-API - Exemplos com cURL"
echo "========================================"
echo ""
echo "Configuração:"
echo "  API_KEY: ${API_KEY:0:10}..."
echo "  BASE_URL: $BASE_URL"
echo ""

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

# Função para imprimir seção
section() {
    echo ""
    echo -e "${BLUE}========================================${NC}"
    echo -e "${BLUE}$1${NC}"
    echo -e "${BLUE}========================================${NC}"
    echo ""
}

# Função para fazer requests
api_get() {
    local endpoint=$1
    curl -s "$BASE_URL$endpoint" \
        -H "X-API-Key: $API_KEY" | jq .
}

api_post() {
    local endpoint=$1
    local data=$2
    curl -s -X POST "$BASE_URL$endpoint" \
        -H "X-API-Key: $API_KEY" \
        -H "Content-Type: application/json" \
        -d "$data" | jq .
}

# ========================================
# 1. Health Check (Sem autenticação)
# ========================================
section "1. Health Check"
echo "Verificando se o servidor está online..."
curl -s "$BASE_URL/health" | jq .

# ========================================
# 2. Informações da Conta
# ========================================
section "2. Informações da Conta"
api_get "/v1/account"

# ========================================
# 3. Estatísticas de Uso
# ========================================
section "3. Estatísticas de Uso"
api_get "/v1/account/usage"

# ========================================
# 4. Listar Databases
# ========================================
section "4. Listar Databases"
api_get "/v1/databases"

# ========================================
# 5. Executar Query Simples
# ========================================
section "5. Query: Versão do PostgreSQL"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "SELECT version()"
}'

# ========================================
# 6. Query com Parâmetros
# ========================================
section "6. Query com Parâmetros"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "SELECT $1::text as message, $2::int as number",
    "params": ["Hello PG-API", 42]
}'

# ========================================
# 7. Criar Tabela (se não existir)
# ========================================
section "7. Criar Tabela de Exemplo"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "CREATE TABLE IF NOT EXISTS pgapi_demo (id SERIAL PRIMARY KEY, name VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"
}'

# ========================================
# 8. Inserir Dados
# ========================================
section "8. Inserir Dados"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "INSERT INTO pgapi_demo (name) VALUES ($1), ($2), ($3) RETURNING *",
    "params": ["Alice", "Bob", "Charlie"]
}'

# ========================================
# 9. Consultar Dados
# ========================================
section "9. Consultar Dados"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "SELECT * FROM pgapi_demo ORDER BY id"
}'

# ========================================
# 10. Batch de Queries
# ========================================
section "10. Batch de Queries"
curl -s -X POST "$BASE_URL/v1/batch" \
    -H "X-API-Key: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '[
        {
            "database": "postgres",
            "query": "SELECT $1::text as msg",
            "params": ["Query 1"]
        },
        {
            "database": "postgres",
            "query": "SELECT $1::text as msg",
            "params": ["Query 2"]
        },
        {
            "database": "postgres",
            "query": "SELECT $1::text as msg",
            "params": ["Query 3"]
        }
    ]' | jq .

# ========================================
# 11. Transação
# ========================================
section "11. Transação"
curl -s -X POST "$BASE_URL/v1/transaction" \
    -H "X-API-Key: $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
        "database": "postgres",
        "queries": [
            {
                "query": "INSERT INTO pgapi_demo (name) VALUES ($1) RETURNING id",
                "params": ["Transaction User 1"]
            },
            {
                "query": "INSERT INTO pgapi_demo (name) VALUES ($1) RETURNING id",
                "params": ["Transaction User 2"]
            }
        ]
    }' | jq .

# ========================================
# 12. Ver Schema
# ========================================
section "12. Schema da Tabela"
api_get "/v1/databases/postgres/schema"

# ========================================
# 13. Listar Tabelas
# ========================================
section "13. Listar Tabelas"
api_get "/v1/databases/postgres/tables"

# ========================================
# 14. Limpar Dados de Exemplo
# ========================================
section "14. Limpar Dados de Exemplo"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "DELETE FROM pgapi_demo WHERE name LIKE $1",
    "params": ["%User%"]
}'

# ========================================
# 15. Dropar Tabela de Exemplo
# ========================================
section "15. Dropar Tabela de Exemplo"
api_post "/v1/query" '{
    "database": "postgres",
    "query": "DROP TABLE IF EXISTS pgapi_demo"
}'

# ========================================
# Fim
# ========================================
section "Exemplos Concluídos!"
echo -e "${GREEN}✅ Todos os exemplos foram executados com sucesso!${NC}"
echo ""
echo "Para mais informações, consulte:"
echo "  - Documentação API: $BASE_URL/docs"
echo "  - API Reference: ../docs/API.md"
