# Dish Planner - Docker Commands

.PHONY: help
help: ## Show this help message
	@echo "Dish Planner - Docker Management"
	@echo ""
	@echo "Usage: make [command]"
	@echo ""
	@echo "Available commands:"
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "  %-20s %s\n", $$1, $$2}'

# Development Commands
.PHONY: dev
dev: ## Start development environment
	docker compose up -d
	@echo "Development server running at http://localhost:8000"
	@echo "Mailhog available at http://localhost:8025"

.PHONY: dev-build
dev-build: ## Build and start development environment
	docker compose build
	docker compose up -d

.PHONY: dev-stop
dev-stop: ## Stop development environment
	docker compose down

.PHONY: dev-clean
dev-clean: ## Stop and remove volumes (CAUTION: removes database)
	docker compose down -v

.PHONY: logs
logs: ## Show application logs
	docker compose logs -f app

.PHONY: logs-db
logs-db: ## Show database logs
	docker compose logs -f db

# Production Commands
.PHONY: prod-build
prod-build: ## Build production image for Codeberg
	./bin/build-push.sh

.PHONY: prod-build-tag
prod-build-tag: ## Build with specific tag (usage: make prod-build-tag TAG=v1.0.0)
	./bin/build-push.sh $(TAG)

.PHONY: prod-login
prod-login: ## Login to Codeberg registry
	podman login codeberg.org

# Laravel Commands
.PHONY: artisan
artisan: ## Run artisan command (usage: make artisan cmd="migrate")
	docker compose exec app php artisan $(cmd)

.PHONY: composer
composer: ## Run composer command (usage: make composer cmd="require package")
	docker compose exec app composer $(cmd)

.PHONY: npm
npm: ## Run npm command (usage: make npm cmd="install package")
	docker compose exec app npm $(cmd)

.PHONY: migrate
migrate: ## Run database migrations
	docker compose exec app php artisan migrate

.PHONY: seed
seed: ## Seed the database
	docker compose exec app php artisan db:seed

.PHONY: fresh
fresh: ## Fresh migrate and seed
	docker compose exec app php artisan migrate:fresh --seed

.PHONY: tinker
tinker: ## Start Laravel tinker
	docker compose exec app php artisan tinker

.PHONY: test
test: ## Run tests
	docker compose exec app php artisan test

# Utility Commands
.PHONY: shell
shell: ## Enter app container shell
	docker compose exec app sh

.PHONY: db-shell
db-shell: ## Enter database shell
	docker compose exec db mariadb -u dishplanner -pdishplanner dishplanner

.PHONY: clear
clear: ## Clear all Laravel caches
	docker compose exec app php artisan cache:clear
	docker compose exec app php artisan config:clear
	docker compose exec app php artisan route:clear
	docker compose exec app php artisan view:clear

.PHONY: optimize
optimize: ## Optimize Laravel for production
	docker compose exec app php artisan config:cache
	docker compose exec app php artisan route:cache
	docker compose exec app php artisan view:cache
	docker compose exec app php artisan livewire:discover

# Installation
.PHONY: install
install: ## First time setup
	@echo "Setting up Dish Planner..."
	@cp -n .env.example .env || true
	@echo "Generating application key..."
	@docker compose build
	@docker compose up -d
	@sleep 5
	@docker compose exec app php artisan key:generate
	@docker compose exec app php artisan migrate
	@echo ""
	@echo "✅ Installation complete!"
	@echo "Access the app at: http://localhost:8000"
	@echo "Create your first planner and user to get started."