#
# SPDX-FileCopyrightText: 2022-present Intel Corporation
# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
# SPDX-License-Identifier: Apache-2.0
#
define PROJECT_HELP_MSG
Usage:
    make help                   show this message
    make clean                  remove intermediate files

    make ${VENV}                  make a virtualenv in the base directory
    make python-reqs            install python packages in requirements.pip
    make git-config             set local git configuration
    make setup                  make python-reqs

    make run                    launch network-video-recorder
    make run-native             run native application (no docker)
    make run-native-no-show     run native applicaiton (no docker) w/o video output
endef
export PROJECT_HELP_MSG

SHELL = bash -eu -o pipefail

VERSION ?= $(shell cat ./VERSION)
#CONTAINER_NAME ?= person-detection-app
CONTAINER_NAME ?= $(notdir $(abspath .))

DOCKER_REGISTRY          ?=
DOCKER_REPOSITORY        ?=
DOCKER_BUILD_ARGS        ?= --rm --force-rm
DOCKER_TAG               ?= ${VERSION}
DOCKER_IMAGENAME         := ${DOCKER_REGISTRY}${DOCKER_REPOSITORY}${CONTAINER_NAME}:${DOCKER_TAG}

DOCKER_LABEL_VCS_URL     ?= $(shell git remote get-url $(shell git remote))
DOCKER_LABEL_VCS_REF     ?= $(shell git diff-index --quiet HEAD -- && git rev-parse HEAD || echo "unknown")
DOCKER_LABEL_COMMIT_DATE ?= $(shell git diff-index --quiet HEAD -- && git show -s --format=%cd --date=iso-strict HEAD || echo "unknown" )
DOCKER_LABEL_BUILD_DATE  ?= $(shell date -u "+%Y-%m-%dT%H:%M:%SZ")

VENV = .venv
PYTHON = $(VENV)/bin/python3
PIP = $(VENV)/bin/pip

ROC_USER ?=
ROC_PASSWD ?=
ROC_URL ?=
KEYCLOAK ?=
ENTERPRISE ?=
SITE ?=
DEVICEGROUP ?=

all: test

help:
	echo "$$PROJECT_HELP_MSG" | less

$(VENV): $(VENV)/touchfile

$(VENV)/touchfile: requirements.txt
	test -d $(VENV) || python3 -m venv $(VENV)
	. $(VENV)/bin/activate; pip install -Ur requirements.txt
	touch $(VENV)/touchfile

$(VENV)/bin/activate: requirements.txt
	python3 -m venv $(VENV)
	$(PIP) install -r requirements.txt

freeze:
	pip3 freeze | grep -v "pkg-resources" > requirements.txt

docker-build: $(VENV)
	docker build $(DOCKER_BUILD_ARGS) \
		-t $(DOCKER_IMAGENAME) \
		--build-arg org_label_schema_version="${VERSION}" \
    	--build-arg org_label_schema_vcs_url="${DOCKER_LABEL_VCS_URL}" \
    	--build-arg org_label_schema_vcs_ref="${DOCKER_LABEL_VCS_REF}" \
    	--build-arg org_label_schema_build_date="${DOCKER_LABEL_BUILD_DATE}" \
    	--build-arg org_opencord_vcs_commit_date="${DOCKER_LABEL_COMMIT_DATE}" \
		-f docker/Dockerfile .

docker-push:
	docker push $(DOCKER_IMAGENAME)

docker-run :
	docker run \
		-itu root:root \
		--privileged \
		--network host \
		--name $(CONTAINER_NAME) \
		--rm \
		$(DOCKER_IMAGENAME) \
		--url $(ROC_URL) \
		--keycloak $(KEYCLOAK) \
		--enterprise $(ENTERPRISE) \
		--site $(SITE) \
		--devicegroup $(DEVICEGROUP) \
		--user $(ROC_USER) --password $(ROC_PASSWD)

run-native-file: $(VENV)
	. ./bin/person_detection.sh -i ./resources/run.mp4

run-native-gstream: $(VENV) 
	. ./bin/person_detection.sh -i gstreamer

run-native-cam: $(VENV)
	. ./bin/person_detection.sh -i cam

lint:
	flake8 --exclude=.tox person_detection

test: docker-build


CLEANUP = *.pyc $(VENV)
clean:
	rm -rf ${CLEANUP}

.PHONY: run clean

