# Peikarband Platform - Makefile

REGISTRY ?= harbor.peikarband.ir
IMAGE_NAME ?= peikarband/landing
VERSION ?= $(shell git describe --tags --always --dirty)
HELM_RELEASE ?= peikarband
NAMESPACE ?= production
DOCKER_BUILDKIT ?= 1

.PHONY: help install dev kill-dev test lint format clean docker-up docker-down migrate

help:
	@echo "Available commands:"
	@echo ""
	@echo "Development:"
	@echo "  make install       - Install dependencies"
	@echo "  make dev           - Run development server"
	@echo "  make kill-dev      - Kill development server processes (ports 3000 & 8000)"
	@echo "  make test          - Run tests"
	@echo "  make lint          - Run linters"
	@echo "  make format        - Format code"
	@echo "  make clean         - Clean temporary files"
	@echo ""
	@echo "Docker:"
	@echo "  make docker-build  - Build Docker image"
	@echo "  make docker-push   - Push Docker image"
	@echo "  make docker-up     - Start Docker Compose"
	@echo "  make docker-down   - Stop Docker Compose"
	@echo ""
	@echo "Kubernetes/Helm:"
	@echo "  make helm-lint     - Lint Helm chart"
	@echo "  make helm-package  - Package Helm chart"
	@echo "  make helm-install  - Install Helm chart"
	@echo "  make helm-upgrade  - Upgrade Helm chart"
	@echo "  make helm-uninstall - Uninstall Helm chart"
	@echo "  make k8s-deploy    - Deploy to Kubernetes"
	@echo ""
	@echo "Database:"
	@echo "  make migrate       - Run database migrations"

install:
	pip install -r requirements.txt
	pip install -r requirements-dev.txt
	pre-commit install

dev:
	python3 -m reflex run

kill-dev:
	@echo "Killing processes on ports 3000 and 8000..."
	@lsof -ti:3000 -ti:8000 2>/dev/null | xargs kill -9 2>/dev/null || true
	@pkill -9 -f reflex 2>/dev/null || true
	@echo "Done!"

test:
	pytest tests/ -v --cov=src --cov-report=html

lint:
	flake8 src/
	mypy src/
	black --check src/
	isort --check-only src/

format:
	black src/
	isort src/

clean:
	find . -type d -name "__pycache__" -exec rm -rf {} +
	find . -type f -name "*.pyc" -delete
	find . -type f -name "*.pyo" -delete
	find . -type d -name ".pytest_cache" -exec rm -rf {} +
	find . -type d -name ".mypy_cache" -exec rm -rf {} +
	find . -type d -name "*.egg-info" -exec rm -rf {} +
	rm -rf .coverage htmlcov/
	rm -rf dist/ build/

# Docker commands
docker-build:
	DOCKER_BUILDKIT=$(DOCKER_BUILDKIT) docker build \
		-t $(IMAGE_NAME):$(VERSION) \
		-t $(IMAGE_NAME):latest \
		--build-arg VERSION=$(VERSION) \
		--build-arg BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ') \
		.

docker-push:
	docker tag $(IMAGE_NAME):$(VERSION) $(REGISTRY)/$(IMAGE_NAME):$(VERSION)
	docker tag $(IMAGE_NAME):$(VERSION) $(REGISTRY)/$(IMAGE_NAME):latest
	docker push $(REGISTRY)/$(IMAGE_NAME):$(VERSION)
	docker push $(REGISTRY)/$(IMAGE_NAME):latest

docker-login:
	@echo "Logging in to Harbor registry..."
	@docker login $(REGISTRY)

docker-up:
	docker-compose up -d

docker-down:
	docker-compose down

# Helm commands
helm-lint:
	helm lint helm/peikarband

helm-template:
	helm template $(HELM_RELEASE) helm/peikarband --debug

helm-package:
	helm package helm/peikarband --destination .

helm-install:
	helm install $(HELM_RELEASE) helm/peikarband \
		--namespace $(NAMESPACE) \
		--create-namespace \
		--set image.repository=$(REGISTRY)/$(IMAGE_NAME) \
		--set image.tag=$(VERSION) \
		--wait

helm-upgrade:
	helm upgrade --install $(HELM_RELEASE) helm/peikarband \
		--namespace $(NAMESPACE) \
		--set image.repository=$(REGISTRY)/$(IMAGE_NAME) \
		--set image.tag=$(VERSION) \
		--wait

helm-uninstall:
	helm uninstall $(HELM_RELEASE) --namespace $(NAMESPACE)

# Kubernetes deployment (full pipeline)
k8s-deploy: docker-build docker-push helm-upgrade
	@echo "Deployment complete!"
	@echo "Check status: kubectl get pods -n $(NAMESPACE)"

# Database
migrate:
	alembic upgrade head

seed:
	python3 scripts/seed_database.py

