#!/bin/bash

# Script interactivo para crear imagen Docker y subirla al registry
# Uso: ./build-and-push.sh

set -e

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

# Configuración por defecto
REGISTRY_URL="10.10.4.3:5000"
IMAGE_NAME="condominio_ibiza"
DOCKERFILE_PATH="docker/Dockerfile"
PROJECT_DIR="/var/www/html/ibiza"

# Función para imprimir mensajes
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

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

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

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

# Verificar que estamos en el directorio correcto
if [ ! -f "$DOCKERFILE_PATH" ]; then
    print_error "No se encontró el Dockerfile en $DOCKERFILE_PATH"
    print_info "Asegúrate de ejecutar este script desde el directorio raíz del proyecto"
    exit 1
fi

# Mostrar banner
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║     🐳 BUILD & PUSH - Condominio Ibiza Docker         ║"
echo "╚════════════════════════════════════════════════════════╝"
echo ""

# Paso 1: Preguntar versión/tag
print_info "Paso 1: Versión de la imagen"
echo ""
read -p "Ingresa la versión/tag (ej: v2.1, latest, o deja en blanco para 'latest'): " VERSION

if [ -z "$VERSION" ]; then
    VERSION="latest"
fi

print_info "Versión seleccionada: $VERSION"
echo ""

# Paso 2: Confirmar registry
print_info "Paso 2: Configuración del Registry"
echo ""
read -p "Registry URL [$REGISTRY_URL]: " INPUT_REGISTRY
REGISTRY_URL=${INPUT_REGISTRY:-$REGISTRY_URL}
print_info "Registry: $REGISTRY_URL"
echo ""

# Paso 3: Seleccionar modo de build
print_info "Paso 3: Modo de construcción"
echo ""
echo "Selecciona el modo de build:"
echo "  1) Con caché (más rápido, reutiliza capas anteriores)"
echo "  2) Sin caché (--no-cache, fuerza reconstrucción completa)"
echo ""
read -p "Opción [1]: " BUILD_OPTION

USE_CACHE="s"
if [ "$BUILD_OPTION" == "2" ]; then
    USE_CACHE="n"
    print_info "Modo seleccionado: Sin caché (build completo)"
else
    print_info "Modo seleccionado: Con caché (build rápido)"
fi
echo ""

# Mostrar resumen antes de comenzar
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║              📋 RESUMEN DE OPERACIÓN                   ║"
echo "╠════════════════════════════════════════════════════════╣"
echo "║  Imagen:     $IMAGE_NAME:$VERSION"
echo "║  Registry:   $REGISTRY_URL"
echo "║  Dockerfile: $DOCKERFILE_PATH"
if [ "$USE_CACHE" == "n" ]; then
echo "║  Modo:       Sin caché (build completo)"
else
echo "║  Modo:       Con caché (build rápido)"
fi
echo "╚════════════════════════════════════════════════════════╝"
echo ""

read -p "¿Deseas continuar? (s/n): " CONFIRM
if [[ $CONFIRM != "s" && $CONFIRM != "S" ]]; then
    print_warning "Operación cancelada por el usuario"
    exit 0
fi

echo ""
print_info "🚀 Iniciando proceso..."
echo ""

# Paso 4: Build de la imagen
print_info "Paso 4: Construyendo imagen Docker..."

if [ "$USE_CACHE" == "n" ]; then
    echo "   Comando: docker build --no-cache -t $IMAGE_NAME:$VERSION -f $DOCKERFILE_PATH ."
    echo ""
    if docker build --no-cache -t "$IMAGE_NAME:$VERSION" -f "$DOCKERFILE_PATH" .; then
        print_success "Imagen construida exitosamente (sin caché): $IMAGE_NAME:$VERSION"
    else
        print_error "Error al construir la imagen"
        exit 1
    fi
else
    echo "   Comando: docker build -t $IMAGE_NAME:$VERSION -f $DOCKERFILE_PATH ."
    echo ""
    if docker build -t "$IMAGE_NAME:$VERSION" -f "$DOCKERFILE_PATH" .; then
        print_success "Imagen construida exitosamente: $IMAGE_NAME:$VERSION"
    else
        print_error "Error al construir la imagen"
        exit 1
    fi
fi

echo ""

# Paso 5: Taggear para el registry
print_info "Paso 5: Taggeando imagen para registry..."
echo "   Comando: docker tag $IMAGE_NAME:$VERSION $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo ""

if docker tag "$IMAGE_NAME:$VERSION" "$REGISTRY_URL/$IMAGE_NAME:$VERSION"; then
    print_success "Imagen taggeada: $REGISTRY_URL/$IMAGE_NAME:$VERSION"
else
    print_error "Error al taggear la imagen"
    exit 1
fi

echo ""

# Paso 6: Subir al registry
read -p "¿Deseas subir la imagen al registry ahora? (s/n): " PUSH_CONFIRM

if [[ $PUSH_CONFIRM == "s" || $PUSH_CONFIRM == "S" ]]; then
    print_info "Paso 6: Subiendo imagen al registry..."
    echo "   Comando: docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION"
    echo ""
    
    if docker push "$REGISTRY_URL/$IMAGE_NAME:$VERSION"; then
        print_success "Imagen subida exitosamente al registry"
    else
        print_error "Error al subir la imagen al registry"
        print_warning "Verifica que el registry esté accesible en $REGISTRY_URL"
        print_info "Puedes intentar subir manualmente con: docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION"
        exit 1
    fi
else
    print_warning "Imagen NO subida al registry"
    print_info "Puedes subirla manualmente después con:"
    echo "   docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION"
fi

echo ""

# Paso 7: Limpiar imágenes locales (opcional)
read -p "¿Deseas eliminar las imágenes locales para liberar espacio? (s/n): " CLEANUP_CONFIRM

if [[ $CLEANUP_CONFIRM == "s" || $CLEANUP_CONFIRM == "S" ]]; then
    print_info "Limpiando imágenes locales..."
    docker rmi "$IMAGE_NAME:$VERSION" "$REGISTRY_URL/$IMAGE_NAME:$VERSION" 2>/dev/null || true
    print_success "Imágenes locales eliminadas"
fi

echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║              ✅ PROCESO COMPLETADO                     ║"
echo "╠════════════════════════════════════════════════════════╣"
echo "║  Imagen:     $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo "╚════════════════════════════════════════════════════════╝"
echo ""

print_info "Para usar esta imagen en ZimaOS/CasaOS:"
echo ""
echo "1. Actualiza tu archivo ibiza.yaml:"
echo "   image: $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo ""
echo "2. Reinicia el contenedor en ZimaOS/CasaOS"
echo ""
echo "3. Verifica los logs:"
echo "   docker logs condominio_ibiza"
echo ""

print_success "¡Listo!"
echo ""
