.PHONY: all init install build push unittest clean

SHELL := /bin/bash

export TRAVIS_BUILD_DIR ?= $(shell pwd)
export TRAVIS_BRANCH ?= localbuild
export TRAVIS_COMMIT ?= localbuild
export TRAVIS_REPO_SLUG ?= asset-performance/APM-PM-LIB
export TRAVIS_BUILD_NUMBER ?= 1000
export ER_PUBLISH ?= false

# -----------------------------------------------------------------------------
# Clean
# -----------------------------------------------------------------------------
clean:
	rm -rf ${TRAVIS_BUILD_DIR}/tmp
	rm -rf ${TRAVIS_BUILD_DIR}/.venv
	rm -rf ${TRAVIS_BUILD_DIR}/.anchore
	rm -rf ${TRAVIS_BUILD_DIR}/.skopeo
	rm -rf ${TRAVIS_BUILD_DIR}/.notify-slack
	rm -rf dist/

# -----------------------------------------------------------------------------
# Init (sets version for local builds)
# -----------------------------------------------------------------------------
init:
ifdef VERSION
	echo "Setting ${HOME}/.version to ${VERSION}"
	echo "${VERSION}-pre.${TRAVIS_BRANCH}" > ${HOME}/.version
	echo "patch" > ${HOME}/.releaselevel
endif

# -----------------------------------------------------------------------------
# Install common tooling and initbuild
# -----------------------------------------------------------------------------
install:
	sudo dnf install -y postgresql postgresql-devel
	pip3 install --upgrade pip

	pip3 install \
		psycopg2-binary \
		ibm_db \
		statsmodels \
		PyWavelets 

# -----------------------------------------------------------------------------
# Build (single, unified stage)
# -----------------------------------------------------------------------------
build: init install
	echo "Starting unified build..."

	if [[ "${TRAVIS_BRANCH}" == "master" ]]; then \
		BUILD_VERSION=`semver`; \
	else \
		BUILD_VERSION=`semver`.dev${TRAVIS_BUILD_NUMBER}; \
	fi; \
	echo "Build version: $$BUILD_VERSION" && \
	pip3 install psycopg2-binary && \
	pip3 install ibm_db && \
	sudo dnf install -y postgresql-devel && \
	./deploy_cp4d.sh $$BUILD_VERSION && \
	ls -la dist/ && \
	mv dist/pmlib-*.zip dist/pmlib.zip && \
	zip -uqr dist/notebook.zip notebook/MAS/ && \
	zip -uqr dist/pytest.zip notebook/test/ && \
	ls -la dist/

# -----------------------------------------------------------------------------
# Push (Docker, release, and optionally scan)
# -----------------------------------------------------------------------------
push: init
	echo "Pushing Docker image and publishing artifacts..."

	docker-build.sh -n predict -i pmlib
	docker-push.sh -n predict -i pmlib

	artifactoryrelease.sh dist/pmlib.zip
	artifactoryrelease.sh dist/doc.zip 
	artifactoryrelease.sh dist/notebook.zip 
	artifactoryrelease.sh dist/pytest.zip 

	if [[ "${TRAVIS_BRANCH}" == "dev" || "${TRAVIS_BRANCH}" == "stable" ]]; then \
		source .env.sh && \
		source .functions.sh && \
		LATEST_URL="${ARTIFACTORY_GENERIC_RELEASE_URL}/${TRAVIS_REPO_SLUG}/latest-${TRAVIS_BRANCH}/pmlib-latest-${TRAVIS_BRANCH}.zip" && \
		artifactory_upload dist/pmlib.zip $$LATEST_URL && \
		LATEST_URL="${ARTIFACTORY_GENERIC_RELEASE_URL}/${TRAVIS_REPO_SLUG}/latest-${TRAVIS_BRANCH}/notebook-latest-${TRAVIS_BRANCH}.zip" && \
		artifactory_upload dist/notebook.zip $$LATEST_URL && \
		LATEST_URL="${ARTIFACTORY_GENERIC_RELEASE_URL}/${TRAVIS_REPO_SLUG}/latest-${TRAVIS_BRANCH}/pytest-latest-${TRAVIS_BRANCH}.zip" && \
		artifactory_upload dist/pytest.zip $$LATEST_URL; \
	fi

	if [ "$(TWISTLOCK_ENABLED)" = "true" ] && [ -f "$(HOME)/build.common/bin/twistlock-scan.sh" ]; then \
		twistlock-scan.sh -n predict -i pmlib --scan-baseimage; \
	else \
		echo "Twistlock scan skipped (enable with TWISTLOCK_ENABLED=true)"; \
	fi

# -----------------------------------------------------------------------------
# Unit tests placeholder
# -----------------------------------------------------------------------------
unittest:
	echo "No unit tests defined"

# -----------------------------------------------------------------------------
# All (local entry point)
# -----------------------------------------------------------------------------
all: build push