ifeq ($(OS),Windows_NT)
SHELL := C:\Program Files\Git\bin\bash.exe
endif

ROOT := $(shell echo ${CURDIR}|sed "s/^\(.\{1\}\)\:/\/\L\1/g")
ARCH := $(shell uname -m | sed "s/x86_64/x64/g" | sed "s/arm64/arm64/g")
BACKEND := ${ROOT}/backend
API :=  ${BACKEND}/API
REVERSEPROXY := ${BACKEND}/ReverseProxy
FRONTEND := ${ROOT}/frontend
DATABASE := ${ROOT}/database
OUT := ${ROOT}/out

DOTNET_FLAGS := --configuration Release  -p:COMPOSE_BUILD=true

#################
# build
#################

frontend_build:
	cd ${FRONTEND}; npm install
	cd ${FRONTEND}; npm run build

api_build:
	cd ${API}; dotnet tool restore
	cd ${API}; dotnet publish --runtime "linux-${ARCH}" --output ${OUT}/API --self-contained ${DOTNET_FLAGS}

reverseproxy_build:
	cd ${REVERSEPROXY}; dotnet publish --runtime "linux-${ARCH}" --output ${OUT}/ReverseProxy --self-contained ${DOTNET_FLAGS}

backend_build: api_build reverseproxy_build

build: frontend_build backend_build

#################
# docker
#################

db_up:
	docker-compose up -d postgres

up:
	docker-compose up -d --build

down:
	docker compose down

start: clean build up

start_backend: backend_clean backend_build up

#################
# clean
#################

backend_clean:
	rm -rf "${BACKEND}/bin"
	rm -rf "${BACKEND}/obj"
	rm -rf "${REVERSEPROXY}/bin"
	rm -rf "${REVERSEPROXY}/obj"
	rm -rf "${OUT}"

frontend_clean:
	rm -rf "${FRONTEND}/node_modules"
	rm -rf "${FRONTEND}/dist"

clean: down backend_clean frontend_clean

