#!/usr/bin/env bash

set -euo pipefail

APP_DIR="/var/www/html/investplus/investplus-v2-cc02e8cb"
SERVICE="investplus"
BRANCH="main"

cd "$APP_DIR"

echo "========================================"
echo "        Deploy InvestPlus"
echo "========================================"

echo "==> Usuário"
if [ "$(id -un)" != "deploy" ]; then
    echo "ERRO: o deploy deve ser executado com o usuário deploy."
    echo "Usuário atual: $(id -un)"
    exit 1
fi

echo "deploy"

echo "==> Diretório"
pwd

echo "==> Atualizando código"
git fetch --all --prune
git checkout "$BRANCH"
git reset --hard "origin/$BRANCH"

echo "==> Limpando arquivos não rastreados"
git clean -fd

echo "==> Verificando estado do Git"
git status --short

echo "==> Verificando package-lock.json"
if [ ! -f package-lock.json ]; then
    echo "ERRO: package-lock.json não encontrado."
    echo "O projeto precisa manter o package-lock.json versionado no Git."
    exit 1
fi

echo "==> Verificando permissões"
if [ ! -w "$APP_DIR" ]; then
    echo "ERRO: o usuário deploy não possui permissão de escrita em:"
    echo "$APP_DIR"
    exit 1
fi

echo "==> Instalando dependências"
npm ci

echo "==> Build EC2"
npm run build:ec2

echo "==> Validando build"

if [ ! -f .output/server/index.mjs ]; then
    echo "ERRO: .output/server/index.mjs não foi gerado."
    exit 1
fi

if [ ! -d .output/public ]; then
    echo "ERRO: .output/public não foi gerado."
    exit 1
fi

if [ ! -d .output/public/assets ]; then
    echo "ERRO: .output/public/assets não foi gerado."
    exit 1
fi

if ! find .output/public/assets -type f \( -name "*.css" -o -name "*.js" \) -print -quit | grep -q .; then
    echo "ERRO: nenhum CSS/JS encontrado em .output/public/assets."
    exit 1
fi

echo "==> Build validado"

echo "==> Reiniciando serviço"
sudo -n /usr/bin/systemctl restart "$SERVICE"

sleep 3

echo "==> Verificando serviço"

if ! sudo -n /usr/bin/systemctl is-active --quiet "$SERVICE"; then
    echo "ERRO: serviço $SERVICE não está ativo."
    sudo -n /usr/bin/systemctl status "$SERVICE" --no-pager -l
    exit 1
fi

sudo -n /usr/bin/systemctl status "$SERVICE" --no-pager -l

echo "========================================"
echo "       Deploy concluído com sucesso"
echo "========================================"