## ===----------------------------------------------------------------------===
## 
## This source file is part of the Marvel Service open source project
## 
## Copyright (c) 2025 Röck+Cöde VoF. and the Marvel Service project authors
## Licensed under Apache license v2.0
## 
## See LICENSE for license information
## See CONTRIBUTORS for the list of Marvel Service project authors
##
## SPDX-License-Identifier: Apache-2.0
## 
## ===----------------------------------------------------------------------===

# ENVIRONMENT VARIABLES

environment ?= .env

include $(environment)
export $(shell sed 's/=.*//' $(environment))

# LIBRARY

lib-build: ## Builds the library
	@swift build

lib-release: ## Releases the library
	@swift build -c release

lib-test: ## Runs the unit tests for the library
	@swift test \
		--disable-xctest \
		--enable-code-coverage \
		--enable-swift-testing \
		--parallel 

# SWIFT PACKAGE MANAGER

pkg-clean: ## Deletes built SPM artifacts of the package
	@swift package clean

pkg-reset: ## Resets the complete SPM cache/build folder of the package
	@swift package reset

pkg-pristine: pkg-clean pkg-reset ## Deletes all built artifacts, caches, and documentations of the package
	@rm -drf $(DOCC_ARCHIVE_OUTPUT)
	@rm -drf $(DOCC_GITHUB_OUTPUT)

pkg-outdated: ## Lists the SPM package dependencies that can be updated
	@swift package update --dry-run

pkg-update: ## Updates the SPM package dependencies
	@swift package update
	
# DOCUMENTATION

doc-generate: doc-generate-archive doc-generate-github ## Generates the library documentation for both Github and Xcode

doc-generate-archive: ## Generates the library documentation archive for Xcode
	@swift package \
		--allow-writing-to-directory $(DOCC_ARCHIVE_OUTPUT) \
		generate-documentation \
		--target $(SPM_LIBRARY_TARGET) \
		--include-extended-types \
		--enable-inherited-docs \
		--output-path $(DOCC_ARCHIVE_OUTPUT)

doc-generate-github: ## Generates the library documentation for Github
	@swift package \
		--allow-writing-to-directory $(DOCC_GITHUB_OUTPUT) \
		generate-documentation \
		--target $(SPM_LIBRARY_TARGET) \
		--disable-indexing \
		--transform-for-static-hosting \
		--include-extended-types \
		--enable-inherited-docs \
		--hosting-base-path $(DOCC_GITHUB_BASE_PATH) \
		--output-path $(DOCC_GITHUB_OUTPUT)

doc-preview: ## Previews the library documentation in Safari
	@open -a safari $(DOCC_PREVIEW_URL)
	@swift package \
		--disable-sandbox \
		preview-documentation \
		--target $(SPM_LIBRARY_TARGET) \
		--include-extended-types \
		--enable-inherited-docs

# IDE

ide-xcode: ## Opens this package with Xcode
	@open -a Xcode Package.swift

ide-vscode: ## Opens this package with Visual Studio Code
	@code .

# HELP

# Output the documentation for each of the defined tasks when `help` is called.
# Reference: https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help

help: ## Prints the written documentation for all the defined tasks
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

.DEFAULT_GOAL := help
