PROJECT_NAME := tcproxy
VERSION := $(shell cat VERSION)
BUILD_DIR := build
DIST_DIR := dist
LDFLAGS := "-w -s"
VVERSION := v$(VERSION)

.PHONY: build
build:
	@echo "Building for this platform ..."
	@mkdir -p $(BUILD_DIR)
	@CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BUILD_DIR)/$(PROJECT_NAME) main.go
	@echo "Build complete!"

.PHONY: install
install: build
	@install build/$(PROJECT_NAME) /usr/local/bin
	@echo "Binary installed at /usr/local/bin/$(PROJECT_NAME)"

.PHONY: release
release:
	@echo "Check if the git working directory is clean"
	@if [ -n "$$(git status --porcelain)" ]; then \
		echo "Error: The working directory is not clean. Please commit or stash your changes."; \
		exit 1; \
	fi

	@echo "Check if the version tag already exists and does not point to HEAD"
	@if git rev-parse $(VVERSION) >/dev/null 2>&1; then \
		if ! git describe --tags --exact-match HEAD >/dev/null 2>&1; then \
			echo "Error: Version $(VVERSION) is already tagged on a different commit."; \
			exit 1; \
		fi; \
	fi

	@echo "Tag the latest commit with the version from VERSION file if not already tagged"
	@if ! git describe --tags --exact-match HEAD >/dev/null 2>&1; then \
		echo "Latest commit not tagged. Tagging with version from VERSION file..."; \
		git tag -a $(VVERSION) -m "Release $(VVERSION)"; \
		git push origin $(VVERSION); \
	fi

	@echo "Set GITEA_TOKEN variable and run goreleaser"
	@echo "export GITEA_TOKEN=$(shell pass www/behzadan.ir/git/reza/tokens/dt06-goreleaser)"
	@echo "goreleaser release"
	#@export GITEA_TOKEN=$(shell pass www/behzadan.ir/git/reza/tokens/dt06-goreleaser) \
	#goreleaser release


.PHONY: run
run:
	go run main.go $(filter-out $@,$(MAKECMDGOALS))
%:
	@:

clean:
	@echo "Cleaning up..."
	@rm -rf ${BUILD_DIR}
	@rm -rf ${DIST_DIR}