.PHONY: help install up down sample reindex migrate sql test clean-cache \
        dev-data dev-logic dev-presentation

# Autodetekcja narzędzia compose: nowe "docker compose" albo stare "docker-compose".
COMPOSE := $(shell if docker compose version >/dev/null 2>&1; then echo "docker compose"; \
                   elif command -v docker-compose >/dev/null 2>&1; then echo "docker-compose"; fi)

# Python aktywnego środowiska (venv). Nadpisz: make install PY=python3.12
PY ?= python

help:
	@echo "install          - zainstaluj zależności WSZYSTKICH warstw do aktywnego venv"
	@echo "sample           - wygeneruj przykładowe pliki .xlsx"
	@echo "dev-data         - uruchom warstwę danych lokalnie (:8002)"
	@echo "dev-logic        - uruchom warstwę logiczną lokalnie (:8001)"
	@echo "dev-presentation - uruchom warstwę prezentacji lokalnie (:8000)"
	@echo "test             - testy warstwy logicznej (silnik efemeryd)"
	@echo "clean-cache      - wyczyść regenerowalny cache warstwy danych"
	@echo "reindex          - zbuduj cache + indeks warstwy bazodanowej"
	@echo "migrate          - ETL: Excel -> SQL"
	@echo "up / down        - uruchom / zatrzymaj cały stos (Docker; wykryto: $(COMPOSE))"
	@echo "sql              - Docker z warstwą SQL (DATA_PROVIDER=sql)"
	@echo ""
	@echo "Szybki start lokalny (bez Dockera), w 3 terminalach:"
	@echo "  make install"
	@echo "  make sample        # opcjonalnie: dane przykładowe"
	@echo "  make dev-data      # terminal 1"
	@echo "  make dev-logic     # terminal 2"
	@echo "  make dev-presentation  # terminal 3  ->  http://localhost:8000"

# --- instalacja zależności do aktywnego środowiska ---
install:
	$(PY) -m pip install \
		-r services/data/requirements.txt \
		-r services/logic/requirements.txt \
		-r services/presentation/requirements.txt
	@echo "OK. Zależności warstw zainstalowane. (Silnik AGPL 'engine-swisseph' instaluje się osobno.)"

sample:
	cd services/data && $(PY) scripts/make_sample_data.py

reindex:
	cd services/data && $(PY) -m app.ingest.build_index

migrate:
	cd services/data && $(PY) -m app.ingest.to_sql

test:
	cd services/logic && PYTHONPATH=. $(PY) -m pytest tests -q

clean-cache:
	rm -rf services/data/.cache/* services/logic/.ephemeris/* 2>/dev/null || true
	@echo "Cache wyczyszczony."

# --- lokalny dev (3 osobne terminale) ---
dev-data:
	cd services/data && uvicorn app.main:app --reload --port 8002

dev-logic:
	cd services/logic && DATA_URL=http://localhost:8002 uvicorn app.main:app --reload --port 8001

dev-presentation:
	cd services/presentation && LOGIC_URL=http://localhost:8001 uvicorn app.main:app --reload --port 8000

# --- Docker (opcjonalnie) ---
up:
	@if [ -z "$(COMPOSE)" ]; then \
		echo "Nie znaleziono Docker Compose (ani 'docker compose', ani 'docker-compose')."; \
		echo "Użyj trybu lokalnego: make install, potem dev-data / dev-logic / dev-presentation."; \
		exit 1; \
	fi
	$(COMPOSE) up --build

down:
	@if [ -z "$(COMPOSE)" ]; then echo "Brak Docker Compose."; exit 1; fi
	$(COMPOSE) down

sql:
	@if [ -z "$(COMPOSE)" ]; then echo "Brak Docker Compose."; exit 1; fi
	DATA_PROVIDER=sql $(COMPOSE) up --build
