.PHONY: help network network-claudeweb up down restart status \
        up-main up-gitea up-wedding up-finance up-bomvizinho up-claudeweb \
        down-main down-gitea down-wedding down-finance down-bomvizinho down-claudeweb \
        logs-main logs-gitea logs-wedding logs-finance logs-bomvizinho logs-claudeweb \
        pull-main pull-gitea pull-wedding pull-finance pull-bomvizinho pull-claudeweb \
        rebuild-wedding rebuild-finance rebuild-bomvizinho rebuild-claudeweb \
        clone-claudeweb clone-bomvizinho

# Orquestrador das stacks. `lronetto-main` é o "platform layer"
# (postgres + redis + minio + pgadmin + caddy). Os demais repos são clonados
# como diretórios IRMÃOS e referenciados aqui. Ajuste os caminhos abaixo se
# usar outro layout no disco.
#
#   lronetto-gitea        https://gitea.lronetto.com/lronetto/lronetto-gitea.git
#   lronetto-wedding      https://gitea.lronetto.com/lronetto/lronetto-wedding.git
#   lronetto-finance      https://gitea.lronetto.com/lronetto/lronetto-finance.git
#   lronetto-bom-vizinho  https://gitea.lronetto.com/lronetto/lronetto-bom-vizinho.git
#   lronetto-claudeweb    https://gitea.lronetto.com/lronetto/lronetto-claudeweb.git
#
# Cada repo põe o compose e o .env num lugar diferente — daí os -f/--env-file
# explícitos abaixo em vez de um padrão único.

NET := infra-net
# Rede isolada dos workers efêmeros do claudeweb (declarada external no compose dele).
NET_WORKERS := claudeweb-workers

WEDDING_DIR    ?= ../lronetto-wedding
GITEA_DIR      ?= ../lronetto-gitea
FINANCE_DIR    ?= ../lronetto-finance
BOMVIZINHO_DIR ?= ../lronetto-bom-vizinho
CLAUDEWEB_DIR  ?= ../lronetto-claudeweb

CLAUDEWEB_REPO  ?= https://gitea.lronetto.com/lronetto/lronetto-claudeweb.git
BOMVIZINHO_REPO ?= https://gitea.lronetto.com/lronetto/lronetto-bom-vizinho.git

DC_MAIN    := docker compose -f docker-compose.yml --env-file .env
DC_GITEA   := docker compose -f $(GITEA_DIR)/docker-compose.yml --env-file $(GITEA_DIR)/.env
DC_WEDDING := docker compose -f $(WEDDING_DIR)/docker-compose.yml --env-file $(WEDDING_DIR)/.env
DC_FINANCE := docker compose -f $(FINANCE_DIR)/docker-compose.yml --env-file $(FINANCE_DIR)/.env
# bom-vizinho: compose E .env vivem em infra/.
DC_BOMVIZINHO := docker compose -f $(BOMVIZINHO_DIR)/infra/docker-compose.yml --env-file $(BOMVIZINHO_DIR)/infra/.env
# claudeweb: compose vive em deploy/compose.yml e o .env fica na RAIZ do repo.
DC_CLAUDEWEB := docker compose -f $(CLAUDEWEB_DIR)/deploy/compose.yml --env-file $(CLAUDEWEB_DIR)/.env

help:
	@echo "Stacks: main (este repo) | gitea ($(GITEA_DIR)) | wedding ($(WEDDING_DIR))"
	@echo "        finance ($(FINANCE_DIR)) | bomvizinho ($(BOMVIZINHO_DIR))"
	@echo "        claudeweb ($(CLAUDEWEB_DIR))"
	@echo ""
	@echo "  make up                 Sobe tudo (main -> gitea -> wedding -> finance -> bomvizinho -> claudeweb)"
	@echo "  make down               Desce tudo na ordem inversa"
	@echo "  make restart            down + up"
	@echo "  make status             ps de todas as stacks"
	@echo ""
	@echo "  make up-main            Sobe só a stack main"
	@echo "  make up-gitea           Sobe só o gitea"
	@echo "  make up-wedding         Build + up do app wedding"
	@echo "  make up-finance         Build + up do app finance"
	@echo "  make up-bomvizinho      Build + up do app bom-vizinho"
	@echo "  make up-claudeweb       Build (incl. worker-image) + up do claudeweb"
	@echo "  make rebuild-{wedding,finance,bomvizinho,claudeweb}"
	@echo "  make down-{main,gitea,wedding,finance,bomvizinho,claudeweb}"
	@echo "  make logs-{main,gitea,wedding,finance,bomvizinho,claudeweb}"
	@echo "  make pull-{main,gitea,wedding,finance,bomvizinho,claudeweb}"
	@echo "  make clone-claudeweb    Clona $(CLAUDEWEB_REPO)"
	@echo "  make clone-bomvizinho   Clona $(BOMVIZINHO_REPO)"
	@echo "  make network            Cria a network external '$(NET)' (idempotente)"
	@echo "  make network-claudeweb  Cria a network external '$(NET_WORKERS)' (idempotente)"

network:
	@./network.sh

network-claudeweb:
	@INFRA_NETWORK=$(NET_WORKERS) ./network.sh

up: network up-main up-gitea up-wedding up-finance up-bomvizinho up-claudeweb

down: down-claudeweb down-bomvizinho down-finance down-wedding down-gitea down-main

restart: down up

status:
	@$(DC_MAIN) ps || true
	@$(DC_GITEA) ps || true
	@$(DC_WEDDING) ps || true
	@$(DC_FINANCE) ps || true
	@$(DC_BOMVIZINHO) ps || true
	@$(DC_CLAUDEWEB) ps || true

up-main: network
	$(DC_MAIN) up -d

up-gitea: network
	$(DC_GITEA) up -d

up-wedding: network
	$(DC_WEDDING) up -d --build

up-finance: network
	$(DC_FINANCE) up -d --build

up-bomvizinho: network
	$(DC_BOMVIZINHO) up -d --build

# Delegado ao Makefile do repo: o `up` de lá builda antes a imagem do worker
# efêmero (fora do compose) que o backend instancia.
up-claudeweb: network network-claudeweb
	$(MAKE) -C $(CLAUDEWEB_DIR) up

rebuild-wedding: network
	$(DC_WEDDING) build --no-cache
	$(DC_WEDDING) up -d

rebuild-finance: network
	$(DC_FINANCE) build --no-cache
	$(DC_FINANCE) up -d

rebuild-bomvizinho: network
	$(DC_BOMVIZINHO) build --no-cache
	$(DC_BOMVIZINHO) up -d

rebuild-claudeweb: network network-claudeweb
	$(MAKE) -C $(CLAUDEWEB_DIR) worker-image
	$(DC_CLAUDEWEB) build --no-cache
	$(DC_CLAUDEWEB) up -d

down-main:
	$(DC_MAIN) down

down-gitea:
	$(DC_GITEA) down

down-wedding:
	$(DC_WEDDING) down

down-finance:
	$(DC_FINANCE) down

down-bomvizinho:
	$(DC_BOMVIZINHO) down

down-claudeweb:
	$(DC_CLAUDEWEB) down

logs-main:
	$(DC_MAIN) logs -f

logs-gitea:
	$(DC_GITEA) logs -f

logs-wedding:
	$(DC_WEDDING) logs -f

logs-finance:
	$(DC_FINANCE) logs -f

logs-bomvizinho:
	$(DC_BOMVIZINHO) logs -f

logs-claudeweb:
	$(DC_CLAUDEWEB) logs -f

pull-main:
	$(DC_MAIN) pull

pull-gitea:
	$(DC_GITEA) pull

pull-wedding:
	$(DC_WEDDING) pull

pull-finance:
	$(DC_FINANCE) pull

pull-bomvizinho:
	$(DC_BOMVIZINHO) pull

pull-claudeweb:
	$(DC_CLAUDEWEB) pull

clone-claudeweb:
	@test -d $(CLAUDEWEB_DIR)/.git \
	  && echo "$(CLAUDEWEB_DIR) já existe" \
	  || git clone $(CLAUDEWEB_REPO) $(CLAUDEWEB_DIR)

clone-bomvizinho:
	@test -d $(BOMVIZINHO_DIR)/.git \
	  && echo "$(BOMVIZINHO_DIR) já existe" \
	  || git clone $(BOMVIZINHO_REPO) $(BOMVIZINHO_DIR)
