#!/bin/bash

set -e

APP_DIR="/opt/thundersd"

echo "===================================="
echo "[UPDATE] Atualizando ThunderSD"
echo "===================================="

cd "$APP_DIR"

echo ""
echo "[INFO] Verificando Docker Compose..."

if docker compose version >/dev/null 2>&1; then
  COMPOSE_CMD="docker compose"
  echo "[OK] Utilizando Docker Compose V2"
elif command -v docker-compose >/dev/null 2>&1; then
  COMPOSE_CMD="docker-compose"
  echo "[OK] Utilizando Docker Compose V1"
else
  echo "[ERRO] Docker Compose nao encontrado."
  echo "Instale o Docker Compose ou rode o install.sh novamente."
  exit 1
fi

echo ""
echo "[CFG] Garantindo uso da imagem latest..."

sudo sed -i 's|registry.gitlab.com/brsistemas1/thundersd/thundersd:1.0|registry.gitlab.com/brsistemas1/thundersd/thundersd:latest|g' docker-compose.yml

echo ""
echo "[CFG] Verificando DATABASE_URL..."

if ! grep -q "^DATABASE_URL=" .env; then
  DB_HOST=$(grep "^DATABASE_HOST=" .env | cut -d '=' -f2)
  DB_PORT=$(grep "^DATABASE_PORT=" .env | cut -d '=' -f2)
  DB_NAME=$(grep "^DATABASE_NAME=" .env | cut -d '=' -f2)
  DB_USER=$(grep "^DATABASE_USER=" .env | cut -d '=' -f2)
  DB_PASS=$(grep "^DATABASE_PASS=" .env | cut -d '=' -f2)

  echo "" >> .env
  echo "DATABASE_URL=postgresql+psycopg://$DB_USER:$DB_PASS@$DB_HOST:$DB_PORT/$DB_NAME?connect_timeout=10" >> .env

  echo "[OK] DATABASE_URL adicionada"
else
  echo "[OK] DATABASE_URL ja existe"
fi

echo ""
echo "[LOGIN] Atualizando login no GitLab Container Registry..."

REGISTRY_USER_FILE="$APP_DIR/.registry_user"
REGISTRY_TOKEN_FILE="$APP_DIR/.registry_token"

if [ -s "$REGISTRY_USER_FILE" ] && [ -s "$REGISTRY_TOKEN_FILE" ]; then
  GITLAB_USER=$(sudo cat "$REGISTRY_USER_FILE")
  GITLAB_TOKEN=$(sudo cat "$REGISTRY_TOKEN_FILE")

  printf '%s' "$GITLAB_TOKEN" | sudo docker login registry.gitlab.com -u "$GITLAB_USER" --password-stdin
else
  echo "[AVISO] Credenciais do Registry nao encontradas em $APP_DIR."
  echo "[AVISO] Usando login Docker ja salvo, se existir."
fi

echo ""
echo "[DOWNLOAD] Baixando nova imagem..."

sudo $COMPOSE_CMD pull

echo ""
echo "[START] Recriando container..."

sudo $COMPOSE_CMD down
sudo $COMPOSE_CMD up -d --force-recreate

echo ""
echo "[LIMPEZA] Limpando imagens antigas..."

sudo docker image prune -a -f || true
sudo docker builder prune -f || true

APP_PORT=$(grep "^APP_PORT=" .env | cut -d '=' -f2)
SERVER_IP=$(hostname -I | awk '{print $1}')

echo ""
echo "[STATUS]"
sudo $COMPOSE_CMD ps

echo ""
echo "===================================="
echo "[OK] ThunderSD atualizado com sucesso"
echo "[URL] Acesso:"
echo "http://$SERVER_IP:$APP_PORT"
echo "===================================="