# CORDAMI Platform — comandos de desarrollo
# Requiere Docker + Docker Compose. Frontend usa Node/npm local (v20+).

.DEFAULT_GOAL := help
COMPOSE := docker compose --project-directory .
BKDIR := backend
FRONT := frontend

.PHONY: help up down build logs ps
.PHONY: migrate migrate-fresh seed seed-fresh tinker test shell
.PHONY: dev dev-bg dev-stop logs-front start stop-all build-front front-lint front-test

help: ## Muestra esta ayuda
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-16s\033[0m %s\n", $$1, $$2}'

start: up dev-bg ## Levanta TODO: contenedores + frontend (usar tras reiniciar el equipo)
	@echo ""
	@echo "  ✅ Todo levantado:"
	@echo "     API:      http://localhost:8085/api/v1/health"
	@echo "     Frontend: http://localhost:5173/"
	@echo "     Logs:     make logs-front"

up: ## Levanta db + backend + nginx (visible en :8085, Postgres en :5434)
	$(COMPOSE) up -d

down: ## Detiene los contenedores
	$(COMPOSE) down

stop-all: ## Detiene contenedores + frontend dev
	$(COMPOSE) down
	-@pkill -f "[v]ite" 2>/dev/null || true

build: ## Reconstruye las imágenes
	$(COMPOSE) build

logs: ## Logs de los contenedores
	$(COMPOSE) logs -f

logs-front: ## Logs del frontend (vite)
	@tail -f /tmp/cordami-vite.log

ps: ## Estado de los contenedores
	$(COMPOSE) ps

migrate: ## Ejecuta migraciones (BD de desarrollo)
	$(COMPOSE) run --rm backend php artisan migrate

migrate-fresh: ## Recrea el esquema de desarrollo desde cero
	$(COMPOSE) run --rm backend php artisan migrate:fresh --seed

seed: ## Siembra los catálogos (municipios/parroquias) en desarrollo
	$(COMPOSE) run --rm backend php artisan db:seed --force

tinker: ## Consola interactiva (BD de desarrollo)
	$(COMPOSE) run --rm backend php artisan tinker

test: ## Ejecuta los tests (usa BD cordami_testing vía .env.testing)
	$(COMPOSE) run --rm -e APP_ENV=testing backend php artisan test

shell: ## Shell PHP dentro del contenedor del backend
	$(COMPOSE) run --rm backend bash

dev: ## Dev server de React + Vite (proxy /api -> :8085)
	cd $(FRONT) && npm run dev

dev-bg: ## Dev server en segundo plano (log en /tmp/cordami-vite.log)
	@if curl -s -o /dev/null http://localhost:5173/; then \
		echo "  Frontend ya está corriendo en :5173"; \
	else \
		echo "  Iniciando frontend en segundo plano..."; \
		cd $(FRONT) && (npm run dev > /tmp/cordami-vite.log 2>&1 &) ; \
		sleep 6; \
	fi
	@curl -s -o /dev/null -w "  Frontend: http://localhost:5173/ -> %{http_code}\n" http://localhost:5173/

dev-stop: ## Detiene el dev server del frontend
	-@pkill -f "[v]ite" 2>/dev/null || true
	@echo "  Frontend detenido"

build-front: ## Compila el frontend para producción
	cd $(FRONT) && npm run build

front-lint: ## Lint del frontend
	cd $(FRONT) && npm run lint

front-test: ## Tests del frontend
	cd $(FRONT) && npm test
