#!/bin/bash

# Script de publicação para crates.io
# Aerun - opensearch-api

set -e

echo "🚀 Preparando publicação do opensearch-api para crates.io..."

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

# Verificar se estamos no diretório correto
if [ ! -f "Cargo.toml" ]; then
    echo -e "${RED}❌ Erro: Cargo.toml não encontrado. Execute este script no diretório raiz do projeto.${NC}"
    exit 1
fi

# Verificar se cargo está instalado
if ! command -v cargo &> /dev/null; then
    echo -e "${RED}❌ Erro: cargo não encontrado. Instale Rust primeiro.${NC}"
    exit 1
fi

# Limpar e verificar o projeto
echo "🧹 Limpando build anterior..."
cargo clean

echo "🔍 Verificando código..."
cargo check

echo "🧪 Executando testes..."
cargo test

echo "📦 Verificando formato..."
cargo fmt --check || {
    echo -e "${YELLOW}⚠️  Código precisa ser formatado. Executando cargo fmt...${NC}"
    cargo fmt
}

echo "🔍 Executando clippy..."
cargo clippy -- -D warnings || {
    echo -e "${RED}❌ Clippy encontrou warnings. Por favor, corrija antes de publicar.${NC}"
    exit 1
}

# Verificar se está logado no crates.io
echo "🔐 Verificando autenticação no crates.io..."
if ! cargo login --token $CARGO_REGISTRY_TOKEN 2>/dev/null; then
    echo -e "${YELLOW}⚠️  Por favor, faça login no crates.io:${NC}"
    echo "   1. Obtenha seu token em: https://crates.io/settings/tokens"
    echo "   2. Execute: cargo login"
    echo "   3. Ou defina: export CARGO_REGISTRY_TOKEN=seu_token"
    exit 1
fi

# Verificar versão
CURRENT_VERSION=$(grep "^version" Cargo.toml | head -1 | cut -d'"' -f2)
echo -e "${GREEN}📌 Versão atual: $CURRENT_VERSION${NC}"

# Perguntar se quer fazer dry-run primeiro
read -p "Deseja fazer um dry-run primeiro? (s/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Ss]$ ]]; then
    echo "🔍 Executando dry-run..."
    cargo publish --dry-run
    
    read -p "Dry-run concluído. Deseja publicar agora? (s/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Ss]$ ]]; then
        echo -e "${YELLOW}⚠️  Publicação cancelada.${NC}"
        exit 0
    fi
fi

# Publicar
echo "📤 Publicando no crates.io..."
cargo publish

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✅ opensearch-api v$CURRENT_VERSION publicado com sucesso!${NC}"
    echo ""
    echo "🔗 Links úteis:"
    echo "   - Crate: https://crates.io/crates/opensearch-api"
    echo "   - Docs: https://docs.rs/opensearch-api"
    echo "   - Repo: https://gitlab.com/aerunti/opensearch-api"
    echo ""
    echo "📝 Próximos passos:"
    echo "   1. Criar tag: git tag -a v$CURRENT_VERSION -m 'Release v$CURRENT_VERSION'"
    echo "   2. Push tag: git push origin v$CURRENT_VERSION"
    echo "   3. Criar release no GitLab"
else
    echo -e "${RED}❌ Erro ao publicar. Verifique os logs acima.${NC}"
    exit 1
fi