# docker-compose orchestration only. The app-level targets that used to live
# here (run, lan-run, stop, migrate, migrate-cache, test, shots, indexnow,
# venv, clean) moved to the backend/frontend app repos along with the code
# they operate on.

.PHONY: up down db-up db-down dev-up dev-down om-up om-down om-backfill

# --- docker-compose stack (backend + frontend + PostgreSQL) ---------------------
# Requires a POSTGRES_PASSWORD (copy .env.example -> .env). See docker-compose.yml.

# Pull each service's published image and start the whole stack (backend +
# frontend + db) in the background. docker-compose.yml no longer has a
# top-level `build:` for backend/frontend -- each ships as its OWN image
# (BACKEND_IMAGE_TAG / FRONTEND_IMAGE_TAG), built in its own app repo (a plain
# `docker build` there, or that repo's own build-push.yml in CI) -- so `up`
# here only pulls + runs; it can no longer build in place.
up:
	docker compose pull
	docker compose up -d

# Stop and remove the stack's containers (named volumes persist).
down:
	docker compose down

# Start just the Postgres service (e.g. to run the app against it from a venv).
db-up:
	docker compose up -d db

# Stop the Postgres service.
db-down:
	docker compose stop db

# The LAN dev stack: uncapped (no CPU limits) and published on 0.0.0.0:8137 so
# phones on the Wi-Fi can reach it (the base file is prod: capped + loopback).
DEV_COMPOSE = docker compose -f docker-compose.yml -f docker-compose.dev.yml
dev-up:
	POSTGRES_PASSWORD=$${POSTGRES_PASSWORD:-thermograph-dev} $(DEV_COMPOSE) up -d --build

dev-down:
	$(DEV_COMPOSE) down

# Self-hosted Open-Meteo (prod-only overlay). Serves the ERA5 archive from object
# storage so the app is off the public archive API. See deploy/openmeteo/README.md
# for the object-storage bucket + rclone mount this expects on the host.
OM_COMPOSE = docker compose -f docker-compose.yml -f docker-compose.openmeteo.yml
om-up:
	$(OM_COMPOSE) up -d --build

om-down:
	$(OM_COMPOSE) down

# One-time historical backfill: write the full 1980→present archive (~1–1.5 TB of
# .om) to object storage. Runs each dataset once (no --repeat-interval), independent
# of the app/db, so it can run before the stack is flipped over. Hours-long.
OM_LAND_VARS = temperature_2m,dew_point_2m,precipitation,shortwave_radiation,wind_u_component_10m,wind_v_component_10m
OM_ERA5_VARS = wind_gusts_10m,temperature_2m,dew_point_2m,precipitation,shortwave_radiation,wind_u_component_10m,wind_v_component_10m
om-backfill:
	$(OM_COMPOSE) run --rm --no-deps open-meteo-sync-land \
		sync copernicus_era5_land $(OM_LAND_VARS) --past-days $${OM_BACKFILL_DAYS:-17000}
	$(OM_COMPOSE) run --rm --no-deps open-meteo-sync-era5 \
		sync copernicus_era5 $(OM_ERA5_VARS) --past-days $${OM_BACKFILL_DAYS:-17000}
