.PHONY: help install apply apply-dev apply-prod list list-dev list-prod validate validate-dev validate-prod ui ui-dev ui-prod materialize materialize-dev materialize-prod materialize-incremental materialize-incremental-dev materialize-incremental-prod

help:
	@echo "Suno Recs Feast Feature Store Commands:"
	@echo ""
	@echo "Setup:"
	@echo "  make install          Install dependencies with uv"
	@echo ""
	@echo "Feature Management:"
	@echo "  make apply            Apply feature definitions to DEV (default)"
	@echo "  make apply-dev        Apply feature definitions to DEV feature store"
	@echo "  make apply-prod       Apply feature definitions to PROD feature store"
	@echo "  make list             List all feature views in DEV (default)"
	@echo "  make list-dev         List feature views in DEV"
	@echo "  make list-prod        List feature views in PROD"
	@echo "  make validate         Validate feature definitions in DEV (default)"
	@echo "  make validate-dev     Validate DEV feature definitions"
	@echo "  make validate-prod    Validate PROD feature definitions"
	@echo ""
	@echo "Materialization (sync features to online store):"
	@echo "  make materialize START_DATE=... END_DATE=...  Materialize features (DEV)"
	@echo "  make materialize-dev START_DATE=... END_DATE=...  Materialize DEV features"
	@echo "  make materialize-prod START_DATE=... END_DATE=...  Materialize PROD features"
	@echo "  make materialize-incremental END_DATE=...  Incremental materialization (DEV)"
	@echo "  make materialize-incremental-dev END_DATE=...  Incremental DEV materialization"
	@echo "  make materialize-incremental-prod END_DATE=...  Incremental PROD materialization"
	@echo ""
	@echo "UI:"
	@echo "  make ui               Start Feast Web UI for DEV (default)"
	@echo "  make ui-dev           Start Feast Web UI for DEV"
	@echo "  make ui-prod          Start Feast Web UI for PROD"
	@echo ""
	@echo "Examples:"
	@echo "  make apply-prod                                    # Apply to production"
	@echo "  make materialize-dev START_DATE=2025-01-01 END_DATE=2025-01-02"
	@echo "  make materialize-incremental-prod END_DATE=2025-01-02T00:00:00"
	@echo ""

install:
	uv sync

# Feature Management - Default uses dev
# Set FEAST_SNOWFLAKE_DATABASE to match the database in the feature_store YAML
apply:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast apply --feature-store-yaml feature_store_dev.yaml

apply-dev:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast apply --feature-store-yaml feature_store_dev.yaml

apply-prod:
	FEAST_SNOWFLAKE_DATABASE=SUNO_PROD feast apply --feature-store-yaml feature_store_prod.yaml

list:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast feature-views list --feature-store-yaml feature_store_dev.yaml

list-dev:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast feature-views list --feature-store-yaml feature_store_dev.yaml

list-prod:
	FEAST_SNOWFLAKE_DATABASE=SUNO_PROD feast feature-views list --feature-store-yaml feature_store_prod.yaml

validate:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast validate --feature-store-yaml feature_store_dev.yaml

validate-dev:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast validate --feature-store-yaml feature_store_dev.yaml

validate-prod:
	FEAST_SNOWFLAKE_DATABASE=SUNO_PROD feast validate --feature-store-yaml feature_store_prod.yaml

# Materialization - Sync features from offline store (Snowflake) to online store (Redis)
materialize:
	@if [ -z "$(START_DATE)" ] || [ -z "$(END_DATE)" ]; then \
		echo "Error: START_DATE and END_DATE are required"; \
		echo "Usage: make materialize START_DATE=2025-01-01 END_DATE=2025-01-02"; \
		exit 1; \
	fi
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast materialize --feature-store-yaml feature_store_dev.yaml $(START_DATE) $(END_DATE)

materialize-dev:
	@if [ -z "$(START_DATE)" ] || [ -z "$(END_DATE)" ]; then \
		echo "Error: START_DATE and END_DATE are required"; \
		echo "Usage: make materialize-dev START_DATE=2025-01-01 END_DATE=2025-01-02"; \
		exit 1; \
	fi
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast materialize --feature-store-yaml feature_store_dev.yaml $(START_DATE) $(END_DATE)

materialize-prod:
	@if [ -z "$(START_DATE)" ] || [ -z "$(END_DATE)" ]; then \
		echo "Error: START_DATE and END_DATE are required"; \
		echo "Usage: make materialize-prod START_DATE=2025-01-01 END_DATE=2025-01-02"; \
		exit 1; \
	fi
	FEAST_SNOWFLAKE_DATABASE=SUNO_PROD feast materialize --feature-store-yaml feature_store_prod.yaml $(START_DATE) $(END_DATE)

materialize-incremental:
	@if [ -z "$(END_DATE)" ]; then \
		echo "Error: END_DATE is required"; \
		echo "Usage: make materialize-incremental END_DATE=2025-01-02T00:00:00"; \
		exit 1; \
	fi
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast materialize-incremental --feature-store-yaml feature_store_dev.yaml $(END_DATE)

materialize-incremental-dev:
	@if [ -z "$(END_DATE)" ]; then \
		echo "Error: END_DATE is required"; \
		echo "Usage: make materialize-incremental-dev END_DATE=2025-01-02T00:00:00"; \
		exit 1; \
	fi
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast materialize-incremental --feature-store-yaml feature_store_dev.yaml $(END_DATE)

materialize-incremental-prod:
	@if [ -z "$(END_DATE)" ]; then \
		echo "Error: END_DATE is required"; \
		echo "Usage: make materialize-incremental-prod END_DATE=2025-01-02T00:00:00"; \
		exit 1; \
	fi
	FEAST_SNOWFLAKE_DATABASE=SUNO_PROD feast materialize-incremental --feature-store-yaml feature_store_prod.yaml $(END_DATE)

# UI
ui:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast ui --feature-store-yaml feature_store_dev.yaml

ui-dev:
	FEAST_SNOWFLAKE_DATABASE=SUNO_DEV_DELPHINE feast ui --feature-store-yaml feature_store_dev.yaml

ui-prod:
	FEAST_SNOWFLAKE_DATABASE=SUNO_PROD feast ui --feature-store-yaml feature_store_prod.yaml

