# Variables
IMAGE_NAME = predictor
TAG = latest
COMPOSE_FILE = docker-compose.yml

# Validate Docker configuration
.PHONY: validate-docker
validate-docker:
	./scripts/validate-docker.sh

# Build the Docker image
.PHONY: build
build:
	docker build -t $(IMAGE_NAME):$(TAG) .

# Run the application with docker-compose
.PHONY: up
up:
	docker-compose -f $(COMPOSE_FILE) up -d

# Run the application with docker-compose and rebuild
.PHONY: up-build
up-build:
	docker-compose -f $(COMPOSE_FILE) up -d --build

# Stop the application
.PHONY: down
down:
	docker-compose -f $(COMPOSE_FILE) down

# Stop the application and remove volumes
.PHONY: down-volumes
down-volumes:
	docker-compose -f $(COMPOSE_FILE) down -v

# View logs
.PHONY: logs
logs:
	docker-compose -f $(COMPOSE_FILE) logs -f

# View logs for specific service
.PHONY: logs-predictor
logs-predictor:
	docker-compose -f $(COMPOSE_FILE) logs -f predictor


# Check service status
.PHONY: ps
ps:
	docker-compose -f $(COMPOSE_FILE) ps

# Execute command in predictor container
.PHONY: exec
exec:
	docker-compose -f $(COMPOSE_FILE) exec predictor sh

# Clean up Docker resources
.PHONY: clean
clean:
	docker-compose -f $(COMPOSE_FILE) down -v --rmi all
	docker system prune -f

# Run tests
.PHONY: test
test:
	go test ./...

# Build locally
.PHONY: build-local
build-local:
	go build -o predictor ./cmd/api

# Run locally
.PHONY: run-local
run-local:
	cd cmd/api && go run .

# Format code
.PHONY: fmt
fmt:
	go fmt ./...

# Lint code
.PHONY: lint
lint:
	golangci-lint run

# Show help
.PHONY: help
help:
	@echo "Available commands:"
	@echo "  validate-docker - Validate Docker configuration"
	@echo "  build          - Build Docker image"
	@echo "  up             - Start services with docker-compose"
	@echo "  up-build       - Start services and rebuild images"
	@echo "  down           - Stop services"
	@echo "  down-volumes   - Stop services and remove volumes"
	@echo "  logs           - View all logs"
	@echo "  logs-predictor - View predictor logs"
	@echo "  ps             - Show service status"
	@echo "  exec           - Execute shell in predictor container"
	@echo "  clean          - Clean up Docker resources"
	@echo "  test           - Run tests"
	@echo "  build-local    - Build locally"
	@echo "  run-local      - Run locally"
	@echo "  fmt            - Format code"
	@echo "  lint           - Lint code"
	@echo "  generate-ogen  - Generate OpenAPI code from swagger spec"
	@echo "  help           - Show this help"

.PHONY: generate-ogen
generate-ogen:
	go run github.com/ogen-go/ogen/cmd/ogen@latest --target pkg/rest -package gsn --clean api/rest/predictor.swagger.yml