# Northern Thailand Ping River Monitor - Makefile

.PHONY: help install install-dev test test-coverage lint format clean run run-api docker-build docker-run docs

# Default target
help:
	@echo "Northern Thailand Ping River Monitor - Available Commands:"
	@echo ""
	@echo "Setup:"
	@echo "  install      Install production dependencies"
	@echo "  install-dev  Install development dependencies"
	@echo ""
	@echo "Development:"
	@echo "  test         Run all tests"
	@echo "  test-cov     Run tests with coverage report"
	@echo "  lint         Run code linting"
	@echo "  format       Format code with black and isort"
	@echo "  clean        Clean up temporary files"
	@echo ""
	@echo "Running:"
	@echo "  run          Run the monitor in continuous mode"
	@echo "  run-api      Run the web API server"
	@echo "  run-test     Run a single test cycle"
	@echo "  run-status   Show system status"
	@echo ""
	@echo "Alerting:"
	@echo "  alert-check  Check water levels and send alerts"
	@echo "  alert-test   Send test Matrix message"
	@echo ""
	@echo "Distribution:"
	@echo "  build-exe    Build standalone executable"
	@echo "  package      Build and create distribution package"
	@echo ""
	@echo "Docker:"
	@echo "  docker-build Build Docker image"
	@echo "  docker-run   Run with Docker Compose"
	@echo "  docker-stop  Stop Docker services"
	@echo ""
	@echo "Database:"
	@echo "  setup-postgres Setup PostgreSQL database"
	@echo "  test-postgres  Test PostgreSQL connection"
	@echo "  encode-password URL encode password for connection string"
	@echo "  migrate-sqlite Migrate SQLite data to PostgreSQL"
	@echo "  migrate-fast   Fast migration with 10K batch size"
	@echo "  analyze-sqlite Analyze SQLite database structure (dry run)"
	@echo ""
	@echo "Documentation:"
	@echo "  docs         Generate documentation"

# Installation
install:
	uv sync --no-dev

install-dev:
	uv sync
	uv run pre-commit install

# Testing
test:
	uv run python test_integration.py
	uv run python test_station_management.py

test-cov:
	uv run pytest --cov=src --cov-report=html --cov-report=term

# Code quality
lint:
	uv run flake8 src/ --max-line-length=100
	uv run mypy src/

format:
	uv run black src/ *.py
	uv run isort src/ *.py

# Cleanup
clean:
	find . -type f -name "*.pyc" -delete
	find . -type d -name "__pycache__" -delete
	find . -type f -name "*.log" -delete
	rm -rf .pytest_cache/
	rm -rf .mypy_cache/
	rm -rf htmlcov/
	rm -rf dist/
	rm -rf build/
	rm -rf *.egg-info/

# Running
run:
	uv run python run.py

run-api:
	uv run python run.py --web-api

run-test:
	uv run python run.py --test

run-status:
	uv run python run.py --status

# Alerting
alert-check:
	uv run python run.py --alert-check

alert-test:
	uv run python run.py --alert-test

# Docker
docker-build:
	docker build -t ping-river-monitor .

docker-run:
	docker-compose -f docker-compose.victoriametrics.yml up -d

docker-stop:
	docker-compose -f docker-compose.victoriametrics.yml down

docker-logs:
	docker-compose -f docker-compose.victoriametrics.yml logs -f

# Documentation
docs:
	cd docs && make html

# Database management
db-migrate:
	uv run python scripts/migrate_geolocation.py

# Monitoring
health-check:
	curl -f http://localhost:8000/health || exit 1

metrics:
	curl -s http://localhost:8000/metrics | jq .

# Development helpers
dev-setup: install-dev
	cp .env.example .env
	@echo "Development environment set up!"
	@echo "Edit .env file with your configuration"

# Production deployment
deploy-check:
	uv run python run.py --test
	@echo "Deployment check passed!"

# Database management
setup-postgres:
	uv run python scripts/setup_postgres.py

test-postgres:
	uv run python -c "from scripts.setup_postgres import test_postgres_connection; from src.config import Config; config = Config.get_database_config(); test_postgres_connection(config['connection_string'])"

encode-password:
	uv run python scripts/encode_password.py

migrate-sqlite:
	uv run python scripts/migrate_sqlite_to_postgres.py

migrate-fast:
	uv run python scripts/migrate_sqlite_to_postgres.py --fast

analyze-sqlite:
	uv run python scripts/migrate_sqlite_to_postgres.py --dry-run

# Distribution
build-exe:
	uv run python build_simple.py

package: build-exe
	@echo "Creating distribution package..."
	@if exist dist\ping-river-monitor-distribution.zip del dist\ping-river-monitor-distribution.zip
	@cd dist && powershell -Command "Compress-Archive -Path * -DestinationPath ping-river-monitor-distribution.zip -Force"
	@echo "✅ Distribution package created: dist/ping-river-monitor-distribution.zip"

# Git helpers
git-setup:
	git remote add origin https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor.git
	@echo "Git remote configured!"

# Quick start
quick-start: install dev-setup run-test
	@echo "Quick start completed!"
	@echo "Run 'make run-api' to start the web interface"

# Gitea Actions
validate-workflows:
	@echo "Validating Gitea Actions workflows..."
	@for file in .gitea/workflows/*.yml; do \
		echo "Checking $$file..."; \
		uv run python -c "import yaml; yaml.safe_load(open('$$file', encoding='utf-8'))" || exit 1; \
	done
	@echo "✅ All workflows are valid"

workflow-test:
	@echo "Testing workflow components locally..."
	make test
	make lint
	make format
	@echo "✅ Workflow test completed"