.PHONY: variables view_sfn_bulk_session_ingest view_sfn_validate_bulk_metadata view_sfn_validate_bulk_assets

SHELL := /bin/bash

variables: .env  							## Ensure .env file is loaded
	@source .env && env | sed 's/=/:=/' | sed 's/^/export /' > makeenv

view_sfn_bulk_session_ingest: variables		## View the Step Function ASL JSON for bulk session ingest
	@source .env && code $$SFN_BULK_SESSION_INGEST_PATH

view_sfn_validate_bulk_metadata: variables	## View the Step Function ASL JSON for validate bulk metadata
	@source .env && code $$SFN_VALIDATE_BULK_METADATA_PATH

view_sfn_validate_bulk_assets: variables	## View the Step Function ASL JSON for validate bulk asset
	@source .env && code $$SFN_VALIDATE_BULK_ASSET_PATH

lock: 
	uv lock
	uv run src/lambda_product_staging/lock_all.py

clean:
	/usr/bin/time uv run src/lambda_product_staging/make_all.py clean

shadow:
	/usr/bin/time uv run src/lambda_product_staging/shadow_all.py

uv_dev:
	uv sync --locked

test_unit:
	/usr/bin/time uv run src/lambda_product_staging/make_all.py test_unit

test_integration:
	/usr/bin/time uv run src/lambda_product_staging/integration_tests.py

lint:
	/usr/bin/time uv run src/lambda_product_staging/make_all.py lint

fmt:
	/usr/bin/time uv run src/lambda_product_staging/make_all.py fmt

docker_unit_lint:
	/usr/bin/time uv run src/lambda_product_staging/make_all.py docker_unit_lint

docker_sfn_integration_test:  # Run SFN integration tests in Docker
	docker compose -f sfn/integration_tests/docker-compose.yml up \
		--build \
		--exit-code-from sfn-integration-tests \
		--abort-on-container-exit \
		--remove-orphans \
		sfn-integration-tests

down_sfn_integration:  # Teardown any remaining Docker containers related to SFN integration tests
	docker compose -f sfn/integration_tests/docker-compose.yml down --remove-orphans

ci_test_sfn_integration: ci_test_sfn_integration_clean  # Run SFN integration tests in CI/CD
	make docker_sfn_integration_test

ci_test_sfn_integration_clean: down_sfn_integration  # Teardown SFN integration tests in CI/CD
