# Tupa — orquestração local do deploy (rode a partir de deploy/).
# Requer: just, terraform, openrsync, ssh, cargo/cross, pass.
#
#   just                 # lista as receitas
#   just bootstrap       # apply + build + deploy + secrets (primeira subida)
#   just release         # build + deploy + secrets (atualização)

set shell := ["bash", "-cu"]

tf := "terraform -chdir=terraform"


# Lista as receitas disponíveis.
default:
    @just --list

# ---------------------------------------------------------------- infra (tf)
# Inicializa o Terraform (baixa o provider).
init:
    {{tf}} init

# Formata os .tf.
fmt:
    {{tf}} fmt -recursive

# Valida a configuração.
validate:
    {{tf}} validate

# Mostra o plano.
plan:
    {{tf}} plan

# Cria/atualiza a infra.
apply:
    {{tf}} apply

# Detecta seu IP público atual e libera SSH só para ele no firewall (+apply).
# Rode sempre que seu IP dinâmico mudar.
allow-ip:
    ./scripts/allow-my-ip.sh

# Derruba tudo.
destroy:
    {{tf}} destroy

# Imprime o host (deploy@<ip>) usado pelos scripts.
host:
    @{{tf}} output -raw deploy_host

# ------------------------------------------------------------------- app
# Build do binário gnu otimizado pra tamanho (dist + upx).
build:
    ./scripts/build-binary.sh

# Envia o binário e reinicia o serviço.
deploy:
    HOST="$({{tf}} output -raw deploy_host)" ./scripts/deploy.sh

# Envia os segredos (pass -> /etc/tupa/tupa.env) e reinicia.
secrets:
    HOST="$({{tf}} output -raw deploy_host)" ./scripts/push-secrets.sh

# Atualização do app: build -> deploy -> secrets.
release: build deploy secrets

# Primeira subida completa: allow-ip (apply c/ seu IP) -> build -> deploy -> secrets.
bootstrap: allow-ip build deploy secrets

# ------------------------------------------------------------------- ops (ssh)
# Abre shell no servidor.
ssh:
    ssh "$({{tf}} output -raw deploy_host)"

# Segue os logs do bot.
logs:
    ssh "$({{tf}} output -raw deploy_host)" 'sudo journalctl _SYSTEMD_USER_UNIT=tupa.service -f'

# Estado dos serviços.
status:
    ssh "$({{tf}} output -raw deploy_host)" 'sudo tupactl status tupa'

# Reinicia o bot.
restart:
    ssh "$({{tf}} output -raw deploy_host)" 'sudo tupactl restart tupa'
