.PHONY: build build-docker build-docker-prod clean help install start dev test lock-update

# Variables
IMAGE_NAME ?= media-streamer
IMAGE_TAG ?= latest
BUN_VERSION ?= 1.2.20
IMAGE_REGISTRY ?= gitea-gitea-ssh.taildb3494.ts.net/will

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

lock-update: ## Update bun.lock file
	bun install

install: lock-update ## Install dependencies

build: ## Build the TypeScript app
	bun run build

dev: ## Start the app in development mode with watch
	bun run start:dev

start: build ## Build and start the app in production mode
	bun run start

test: ## Run tests
	bun test

clean: ## Clean build artifacts
	rm -rf dist/

build-docker: ## Build Docker image for multiple architectures (amd64, arm64)
	docker buildx build \
		--platform linux/amd64 \
		--build-arg BUN_VERSION=$(BUN_VERSION) \
		-t $(IMAGE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG) \
		.

build-docker-prod: ## Build Docker image for multiple architectures with production optimizations
	docker buildx build \
		--platform linux/amd64,linux/arm64 \
		--build-arg BUN_VERSION=$(BUN_VERSION) \
		-t $(IMAGE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG) \
		--push \
		.

build-docker-local: ## Build Docker image for current architecture only (faster for local testing)
	docker build \
		--build-arg BUN_VERSION=$(BUN_VERSION) \
		-t $(IMAGE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG) \
		.

push-docker: ## Push Docker image to registry (requires IMAGE_REGISTRY set)
	@if [ -z "$(IMAGE_REGISTRY)" ]; then \
		echo "Error: IMAGE_REGISTRY not set"; \
		exit 1; \
	fi
	docker tag $(IMAGE_NAME):$(IMAGE_TAG) $(IMAGE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
	docker push $(IMAGE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)

all: clean install build build-docker ## Clean, install, build app, and build Docker image
