#!/bin/bash

# Script de release completo para opensearch-api
# Aerun - opensearch-api

set -e

# 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}🚀 opensearch-api - Release Manager${NC}"
echo "======================================"

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

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

# Menu de opções
echo ""
echo "Escolha o tipo de release:"
echo "  1) Patch (0.1.0 -> 0.1.1)"
echo "  2) Minor (0.1.0 -> 0.2.0)"
echo "  3) Major (0.1.0 -> 1.0.0)"
echo "  4) Custom"
echo "  5) Apenas publicar versão atual"

read -p "Opção [1-5]: " choice

case $choice in
    1)
        # Incrementar patch
        NEW_VERSION=$(echo $CURRENT_VERSION | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g')
        ;;
    2)
        # Incrementar minor
        NEW_VERSION=$(echo $CURRENT_VERSION | awk -F. '{$(NF-1) = $(NF-1) + 1; $NF = 0;} 1' | sed 's/ /./g')
        ;;
    3)
        # Incrementar major
        NEW_VERSION=$(echo $CURRENT_VERSION | awk -F. '{$1 = $1 + 1; $2 = 0; $3 = 0;} 1' | sed 's/ /./g')
        ;;
    4)
        # Custom version
        read -p "Nova versão: " NEW_VERSION
        ;;
    5)
        # Manter versão atual
        NEW_VERSION=$CURRENT_VERSION
        ;;
    *)
        echo -e "${RED}❌ Opção inválida${NC}"
        exit 1
        ;;
esac

if [ "$NEW_VERSION" != "$CURRENT_VERSION" ]; then
    echo -e "${YELLOW}📝 Atualizando versão: $CURRENT_VERSION -> $NEW_VERSION${NC}"
    
    # Atualizar Cargo.toml
    sed -i "s/^version = \"$CURRENT_VERSION\"/version = \"$NEW_VERSION\"/" Cargo.toml
    
    # Atualizar Cargo.lock
    cargo update -p opensearch-api
    
    # Commit mudanças
    git add Cargo.toml Cargo.lock
    git commit -m "chore: bump version to $NEW_VERSION"
fi

echo ""
echo -e "${BLUE}📋 Checklist pré-release:${NC}"
echo "  ✓ Versão: $NEW_VERSION"
echo "  ✓ Testes passando"
echo "  ✓ Documentação atualizada"
echo "  ✓ CHANGELOG.md atualizado"
echo ""

read -p "Continuar com o release? (s/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Ss]$ ]]; then
    echo -e "${YELLOW}⚠️  Release cancelado${NC}"
    exit 0
fi

# Criar tag
TAG="v$NEW_VERSION"
echo -e "${GREEN}🏷️  Criando tag $TAG...${NC}"
git tag -a $TAG -m "Release $TAG

- Published to crates.io
- Full changelog: https://gitlab.com/aerunti/opensearch-api/-/blob/main/CHANGELOG.md"

# Push para GitLab
echo -e "${GREEN}📤 Enviando para GitLab...${NC}"
git push origin main
git push origin $TAG

# Publicar no crates.io
echo -e "${GREEN}📦 Publicando no crates.io...${NC}"
./scripts/publish.sh

echo ""
echo -e "${GREEN}✅ Release $NEW_VERSION concluído com sucesso!${NC}"
echo ""
echo "📝 Próximos passos:"
echo "  1. Criar release no GitLab: https://gitlab.com/aerunti/opensearch-api/-/releases/new"
echo "  2. Atualizar landing page se necessário"
echo "  3. Anunciar release (Twitter, Discord, etc.)"
echo ""
echo "🔗 Links:"
echo "  - Crate: https://crates.io/crates/opensearch-api/$NEW_VERSION"
echo "  - Docs: https://docs.rs/opensearch-api/$NEW_VERSION"
echo "  - Tag: https://gitlab.com/aerunti/opensearch-api/-/tags/$TAG"