#
# SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
# SPDX-License-Identifier: LicenseRef-ONF-Member-1.01
#
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

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

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)

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

