.PHONY: help build run test clean docker-build docker-up docker-down fmt lint

# Variables
APP_NAME=blogging-cms
GO_VERSION=1.21
PORT=8080

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

install-deps: ## Install Go dependencies
	go mod download
	go mod tidy

build: ## Build the application
	CGO_ENABLED=0 GOOS=linux go build -o $(APP_NAME) .

run: ## Run the application locally
	go run main.go

dev: install-deps ## Run in development mode with hot reload
	which air > /dev/null || go install github.com/cosmtrek/air@latest
	air

test: ## Run tests
	go test -v -race -coverprofile=coverage.out ./...

test-coverage: test ## Run tests and display coverage
	go tool cover -html=coverage.out

clean: ## Clean build artifacts
	rm -f $(APP_NAME)
	rm -f coverage.out
	rm -rf dist/

fmt: ## Format code
	gofmt -s -w .
	go mod tidy

lint: ## Run linter
	which golangci-lint > /dev/null || go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
	golangci-lint run ./...

vet: ## Run go vet
	go vet ./...

docker-build: ## Build Docker image
	docker build -t $(APP_NAME):latest .

docker-up: ## Start Docker containers
	docker-compose up -d

docker-down: ## Stop Docker containers
	docker-compose down

docker-logs: ## View Docker logs
	docker-compose logs -f app

docker-clean: ## Remove Docker containers and volumes
	docker-compose down -v

docker-rebuild: docker-down docker-build docker-up ## Rebuild and restart containers

db-shell: ## Access MariaDB shell
	docker-compose exec mariadb mysql -u cms_user -p blogging_cms

db-reset: ## Reset database (DANGEROUS!)
	docker-compose exec mariadb mysql -u root -p -e "DROP DATABASE blogging_cms; CREATE DATABASE blogging_cms;"

setup: ## Complete setup for development
	cp .env.example .env
	go mod download
	docker-compose up -d
	@echo "Setup complete! Run 'make dev' to start developing."

update-deps: ## Update Go dependencies
	go get -u ./...
	go mod tidy

check: fmt vet lint ## Run all checks

all: clean install-deps build test ## Build and test

.DEFAULT_GOAL := help
