#!/bin/bash

# Script de deploy - funciona para dev e prod

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

# Função para printar com cor
print_info() {
    echo -e "${BLUE}ℹ${NC} $1"
}

print_success() {
    echo -e "${GREEN}✓${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}⚠${NC} $1"
}

print_error() {
    echo -e "${RED}✗${NC} $1"
}

# Verificar argumentos
ENV=${1:-production}

if [ "$ENV" != "production" ] && [ "$ENV" != "development" ] && [ "$ENV" != "dev" ] && [ "$ENV" != "prod" ]; then
    print_error "Ambiente inválido: $ENV"
    echo "Uso: ./deploy.sh [development|production|dev|prod]"
    exit 1
fi

# Normalizar nomes
if [ "$ENV" = "dev" ]; then
    ENV="development"
fi

if [ "$ENV" = "prod" ]; then
    ENV="production"
fi

COMPOSE_FILE="docker-compose.$ENV.yml"

print_info "🚀 Iniciando deploy para: $ENV"

# Verificar se arquivo .env existe
if [ ! -f ".env.$ENV" ]; then
    print_error "Arquivo .env.$ENV não encontrado!"
    exit 1
fi

if [ ! -f "$COMPOSE_FILE" ]; then
    print_error "Arquivo $COMPOSE_FILE não encontrado!"
    exit 1
fi

print_success "Usando $COMPOSE_FILE com .env.$ENV"

# Executar migrações localmente antes de subir o container
# (prisma é devDependency e não está disponível no runtime do container)
print_info "Executando migrações do Prisma..."
DB_URL=$(grep "^DATABASE_URL=" ".env.$ENV" | cut -d'=' -f2-)
if DATABASE_URL="$DB_URL" npx prisma migrate deploy; then
    print_success "Migrações executadas"
else
    print_warning "Erro nas migrações (talvez já estejam aplicadas)"
fi

# Parar e remover containers antigos
print_info "Parando containers antigos..."
CONTAINER_NAME="toptran-backend-${ENV}"
podman stop "$CONTAINER_NAME" 2>/dev/null || true
podman rm -f "$CONTAINER_NAME" 2>/dev/null || true
podman-compose -f "$COMPOSE_FILE" down 2>/dev/null || true

# Build
print_info "Building docker image..."
podman-compose -f "$COMPOSE_FILE" build --no-cache

print_success "Build concluído"

# Iniciar containers
print_info "Iniciando containers..."
podman-compose -f "$COMPOSE_FILE" up -d

print_success "Containers iniciados"

# Mostrar status
print_info "Status dos containers:"
podman ps --filter "name=toptran" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# Mostrar logs
print_info "Ultimos logs:"
sleep 3
podman-compose -f "$COMPOSE_FILE" logs --tail=20 backend

print_success "Deploy concluído para $ENV!"
print_info "Para ver logs: podman-compose -f $COMPOSE_FILE logs -f backend"
