#!/bin/bash

# 🚀 Comandos Útiles para CI/CD - Francia Ocupada
# Este archivo contiene comandos útiles para gestionar el CI/CD

echo "==================================================="
echo "🎮 Francia Ocupada - Comandos Útiles CI/CD"
echo "==================================================="
echo ""

# Función para mostrar comandos con descripción
show_command() {
    echo -e "\033[1;33m$1\033[0m"
    echo -e "\033[0;36m$2\033[0m"
    echo ""
}

echo "📦 GESTIÓN DE CONTENEDORES"
echo "---------------------------------------------------"
show_command "Ver estado de contenedores:" \
    "docker compose -f docker-compose_prod.yml ps"

show_command "Iniciar servicios:" \
    "docker compose -f docker-compose_prod.yml up -d"

show_command "Detener servicios:" \
    "docker compose -f docker-compose_prod.yml down"

show_command "Reiniciar servicios:" \
    "docker compose -f docker-compose_prod.yml restart"

show_command "Reconstruir y reiniciar:" \
    "docker compose -f docker-compose_prod.yml up -d --build"

echo ""
echo "📋 LOGS Y DEBUGGING"
echo "---------------------------------------------------"
show_command "Ver todos los logs:" \
    "docker compose -f docker-compose_prod.yml logs"

show_command "Logs en tiempo real:" \
    "docker compose -f docker-compose_prod.yml logs -f"

show_command "Logs del cliente:" \
    "docker compose -f docker-compose_prod.yml logs -f client"

show_command "Logs del servidor:" \
    "docker compose -f docker-compose_prod.yml logs -f server"

show_command "Logs de la base de datos:" \
    "docker compose -f docker-compose_prod.yml logs -f db"

show_command "Últimas 100 líneas de logs:" \
    "docker compose -f docker-compose_prod.yml logs --tail=100"

echo ""
echo "🔍 INSPECCIÓN Y DEBUGGING"
echo "---------------------------------------------------"
show_command "Entrar al contenedor del cliente:" \
    "docker exec -it resistencia-client sh"

show_command "Entrar al contenedor del servidor:" \
    "docker exec -it resistencia-server sh"

show_command "Entrar a la base de datos:" \
    "docker exec -it resistencia-db psql -U postgres -d resistencia"

show_command "Ver uso de recursos:" \
    "docker stats"

show_command "Inspeccionar red:" \
    "docker network inspect resistencia_resistencia-net"

echo ""
echo "🧹 LIMPIEZA"
echo "---------------------------------------------------"
show_command "Limpiar contenedores detenidos:" \
    "docker container prune -f"

show_command "Limpiar imágenes sin usar:" \
    "docker image prune -f"

show_command "Limpiar todo (CUIDADO):" \
    "docker system prune -a -f"

show_command "Limpiar volúmenes (CUIDADO - BORRA DATOS):" \
    "docker volume prune -f"

echo ""
echo "🔧 TROUBLESHOOTING"
echo "---------------------------------------------------"
show_command "Ver puertos en uso:" \
    "sudo lsof -i :3000 :4000 :5432"

show_command "Verificar conectividad local:" \
    "curl http://localhost:3000 && curl http://localhost:4000"

show_command "Ver configuración de docker-compose:" \
    "docker compose -f docker-compose_prod.yml config"

show_command "Reconstruir sin caché:" \
    "docker compose -f docker-compose_prod.yml build --no-cache"

echo ""
echo "🚀 GIT Y DESPLIEGUE"
echo "---------------------------------------------------"
show_command "Ver estado de Git:" \
    "git status"

show_command "Ver último commit:" \
    "git log -1"

show_command "Trigger CI/CD (commit vacío):" \
    "git commit --allow-empty -m 'test: Trigger CI/CD' && git push origin main"

show_command "Ver commits recientes:" \
    "git log --oneline -10"

show_command "Ver diferencias con origin:" \
    "git diff origin/main"

echo ""
echo "🌐 VERIFICACIÓN DE PRODUCCIÓN"
echo "---------------------------------------------------"
show_command "Verificar frontend (local):" \
    "curl -I http://localhost:3000"

show_command "Verificar API (local):" \
    "curl -I http://localhost:4000"

show_command "Verificar frontend (producción):" \
    "curl -I https://franciaocupada.martivich.es"

show_command "Verificar API (producción):" \
    "curl -I https://api.franciaocupada.martivich.es"

echo ""
echo "📊 MONITOREO"
echo "---------------------------------------------------"
show_command "Script de monitoreo interactivo:" \
    "./monitor-deploy.sh"

show_command "Ver acciones de Gitea (navegador):" \
    "xdg-open http://gitea.local:3000/marti/FranciaOcupada/actions"

echo ""
echo "💾 BACKUP Y RESTAURACIÓN"
echo "---------------------------------------------------"
show_command "Backup de la base de datos:" \
    "docker exec resistencia-db pg_dump -U postgres resistencia > backup_\$(date +%Y%m%d_%H%M%S).sql"

show_command "Restaurar base de datos:" \
    "docker exec -i resistencia-db psql -U postgres resistencia < backup.sql"

show_command "Exportar volumen de datos:" \
    "docker run --rm -v resistencia_postgres_data:/data -v \$(pwd):/backup alpine tar czf /backup/postgres_data_backup.tar.gz -C /data ."

echo ""
echo "🎯 COMANDOS RÁPIDOS"
echo "---------------------------------------------------"
show_command "Reinicio completo (desarrollo):" \
    "docker compose down && docker compose up -d --build"

show_command "Reinicio completo (producción):" \
    "docker compose -f docker-compose_prod.yml down && docker compose -f docker-compose_prod.yml up -d --build"

show_command "Ver todo el estado del sistema:" \
    "docker compose -f docker-compose_prod.yml ps && docker compose -f docker-compose_prod.yml logs --tail=20"

echo ""
echo "==================================================="
echo "💡 Tip: Guarda este archivo como referencia"
echo "    Ejecuta: cat useful-commands.sh | less"
echo "==================================================="
