# Defaults (override via `make VAR=value`)
NAME ?= rentease
PORT ?= 8000
DB_USER ?= ruidy
DB_NAME ?= villafleurie

DOCKER_RUN_ENV = -e DATABASE_URL="host=docker.for.mac.host.internal user=$(DB_USER) database=$(DB_NAME)" -e PORT=$(PORT)

.PHONY: help build run dev test up-deps format lint stop

help: ## List available commands
	@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  %-12s %s\n", $$1, $$2}'

build: format lint ## Build the production Docker image
	docker build -t $(NAME):latest .

run: build ## Run the production container (port $(PORT))
	docker run -p $(PORT):$(PORT) $(DOCKER_RUN_ENV) $(NAME)

dev: ## Build and run the dev container with live reload (Air)
	docker build -t $(NAME):dev -f Dockerfile.dev .
	docker run -p $(PORT):$(PORT) --rm \
	  -v `pwd`:/app -v /app/tmp \
	  --name $(NAME) \
	  $(DOCKER_RUN_ENV) $(NAME):dev

test: ## Run Go tests inside the running dev container
	docker exec $(NAME) go test ./...

up-deps: ## Update Go dependencies on host
	go get -u ./...

format: ## Generate templ files and format code (dev container must be running)
	docker exec $(NAME) templ generate internal/view
	docker exec $(NAME) templ fmt .
	docker exec $(NAME) go fmt ./...

lint: ## Lint the code using golangci-lint (dev container must be running)
	docker exec $(NAME) golangci-lint run ./...

stop: ## Stop the dev container
	-@docker stop $(NAME) >/dev/null 2>&1 || true

