SHELL := /bin/bash

PNPM ?= pnpm
GO ?= go
CONTAINER_REG ?= repo.ssp-itinfra.com/admin
IMAGE_NAME ?= shooting-event
ARCH ?= amd64
BUILD_DATE ?= $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
BUILD_VERSION ?= $(shell git describe --tags --always --dirty)

.PHONY: install dev dev-backend dev-frontend build build-frontend build-backend docker-build docker-run clean

install:
	cd frontend && $(PNPM) install
	cd backend && $(GO) mod tidy

dev-backend:
	cd backend && $(GO) run .

dev-frontend:
	cd frontend && $(PNPM) dev

dev:
	@set -euo pipefail; \
	trap 'kill 0' INT TERM EXIT; \
	$(MAKE) dev-backend & \
	$(MAKE) dev-frontend & \
	wait

build-frontend:
	cd frontend && $(PNPM) build

build-backend:
	mkdir -p bin
	cd backend && $(GO) build -o ../bin/shooting-event .

build: build-frontend
	rm -rf backend/web
	mkdir -p backend/web
	cp -R frontend/dist/. backend/web/
	$(MAKE) build-backend

docker-build:
	docker buildx build --load --platform=linux/$(ARCH) -t $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH) .
	docker tag $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH) $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH)-latest
	docker tag $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH) $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH)-$(BUILD_VERSION)
	docker push $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH)
	docker push $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH)-latest
	docker push $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH)-$(BUILD_VERSION)

docker-run:
	mkdir -p data
	docker run --rm -p 8080:8080 -v $(PWD)/data:/app/data $(CONTAINER_REG)/$(IMAGE_NAME):$(ARCH)

clean:
	rm -rf bin frontend/dist backend/web
