BINARY = beerpong-elo
BUILD_DIR = build
BUILD_ARCH = $(shell go env GOARCH)
BUILD_OS = $(shell go env GOOS)
DOCKER_BUILD_FLAGS = 
DOCKER_BUILD_PLATFORM = linux/amd64,linux/arm64,linux/arm32v6,linux/arm32v7
DOCKER_BUILD_TAG = djeeberjr/beerpong-elo
DIST_DIR = static
EMBED_DIR = internal/web/static

.PHONY: all
all: clean build

.PHONY:build
build: $(BUILD_DIR)/$(BINARY) 

$(BUILD_DIR)/$(BINARY): $(EMBED_DIR) $(shell find . -name '*.go')
	GOARCH=$(BUILD_ARCH) GOOS=$(BUILD_OS) go build -o $(BUILD_DIR)/$(BINARY) cmd/beerpong-elo.go

$(EMBED_DIR): $(BUILD_DIR)/$(DIST_DIR)
	cp -r $(BUILD_DIR)/$(DIST_DIR) $(EMBED_DIR)

$(BUILD_DIR)/$(DIST_DIR):
	cd web/ && npm run build && mkdir ../$(BUILD_DIR) && cp -r dist/ ../$(BUILD_DIR)/$(DIST_DIR)

.PHONY: deps
deps: 
	cd web/ && npm ci

.PHONY:clean
clean:
	rm -rf $(BUILD_DIR) $(EMBED_DIR)

.PHONY: test
test:
	go test ./...

.PHONY: docker-push
docker-push:
	docker buildx build $(DOCKER_BUILD_FLAGS) --platform $(DOCKER_BUILD_PLATFORM) -t $(DOCKER_BUILD_TAG) . --push

.PHONY: docker-local
docker-local: 
	docker buildx build $(DOCKER_BUILD_FLAGS) -t $(DOCKER_BUILD_TAG) . --load