ifneq (,$(wildcard .mk.vars))
include .mk.vars
export $(shell sed -n 's/^[[:space:]]*\([A-Za-z_][A-Za-z0-9_]*\)[[:space:]]*=.*/\1/p' .mk.vars)
endif

SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c
.ONESHELL:
# --- Load .env if present ---
ifneq (,$(wildcard .env))
include .env
export $(shell sed -n 's/^[[:space:]]*\([A-Za-z_][A-Za-z0-9_]*\)[[:space:]]*=.*/\1/p' .env)
endif


# --- Config (override at call-site: e.g., make hybrid OUT_DIR=out/hybrid2) ---
PY ?= python
OUT_DIR ?= out/hybrid
ROSTER ?= data/roster_week.csv
TEAMS ?= data/teams.csv
MATCHUPS ?= data/matchups.csv
PUBLIC_POINTS ?= data/season_2025_joined_points.csv
SYN_PTS ?= data/season_2025_joined_points.synthetic.csv

.DEFAULT_GOAL := hybrid

# Build synthetic public points from roster (week as points)
synthetic-points:
	@echo "[make] building synthetic points -> $(SYN_PTS)"
	@$(PY) - <<-'PY'
	import pandas as pd
	from pathlib import Path
	roster = "$(ROSTER)"
	out = "$(SYN_PTS)"
	rw = pd.read_csv(roster)[["season","week","athlete_id"]].drop_duplicates()
	rw["points"] = rw["week"].astype(float)
	rw["player_name"] = ""
	Path(out).parent.mkdir(parents=True, exist_ok=True)
	rw.to_csv(out, index=False)
	print(f"[make] wrote: {out} rows={len(rw)}")
	PY

# Hybrid join: prefer PUBLIC_POINTS if it exists, else fall back to synthetic
hybrid: maybe-synthetic
	@echo "[make] running hybrid -> $(OUT_DIR)"
	@. .mk.vars 2>/dev/null || true
	@$(PY) -m fppull.cli.hybrid_pipeline \
	  --public-points "$(PUBLIC_POINTS_OR_SYN)" \
	  --teams         "$(TEAMS)" \
	  --roster-week   "$(ROSTER)" \
	  --matchups      "$(MATCHUPS)" \
	  --out-dir       "$(OUT_DIR)"

# Helper to decide which points file to use
.PHONY: maybe-synthetic
maybe-synthetic:
	@if [ -f "$(PUBLIC_POINTS)" ] && [ -s "$(PUBLIC_POINTS)" ]; then \
	  echo "[make] using PUBLIC_POINTS=$(PUBLIC_POINTS)"; \
	  printf "PUBLIC_POINTS_OR_SYN=%s\n" "$(PUBLIC_POINTS)" > .mk.vars; \
	else \
	  echo "[make] PUBLIC_POINTS not found or empty; generating synthetic"; \
	  python - <<-'PYGEN' \
	  import pandas as pd
	  from pathlib import Path
	  roster = "$(ROSTER)"
	  out    = "$(SYN_PTS)"
	  rw = pd.read_csv(roster)[["season","week","athlete_id"]].drop_duplicates()
	  rw["points"] = rw["week"].astype(float)
	  rw["player_name"] = ""
	  Path(out).parent.mkdir(parents=True, exist_ok=True)
	  rw.to_csv(out, index=False)
	  print(f"[make] wrote: {out} rows={len(rw)}")
	  PYGEN; \
	  printf "PUBLIC_POINTS_OR_SYN=%s\n" "$(SYN_PTS)" > .mk.vars; \
fi
# --- appended smoke/clean targets ---
.PHONY: smoke clean

smoke:
	@OUT_DIR="$(OUT_DIR)" ROSTER="$(ROSTER)" TEAMS="$(TEAMS)" MATCHUPS="$(MATCHUPS)" SYN_PTS="$(SYN_PTS)" \
	  bash tests/smoke_hybrid.sh

clean:
	@echo "[make] cleaning outputs"
	@rm -rf "$(OUT_DIR)" .mk.vars
