SHELL := /bin/bash

ifneq (,$(wildcard .env))
	include .env
	export
endif

LDFLAGS := \
	-X 'main.DB_URI=$(DB_URI)'

tidy:
	go mod tidy

clean:
	@go clean
	@rm -rf ./.pm
	@rm -rf ./bin
	@rm -rf ./dist
	@rm -rf ./.idea
	@rm -rf node_modules
	@rm -f package-lock.json
	@rm -f package.json
	@rm -f ./build/pm
	@rm -f ./build/pm_bash.sh

build: tidy
	@go build -ldflags "$(LDFLAGS)" -o ./bin/pm ./cmd/pm
	@go build -o ./bin/tui ./cmd/tui
	@go build -o ./bin/web ./cmd/web
	@echo "Build completed successfully. Binaries are located in the ./bin directory."

enable-multiplatform-build:
	@docker buildx create --name multiplatform --use 2>/dev/null || docker buildx use multiplatform

docker-build: enable-multiplatform-build
	@docker buildx build \
  --platform linux/amd64,linux/arm64,linux/arm/v7 \
  -t telikz/lazypm:latest \
  --push .

docker-run:
	@docker run -it -p 8080:8080 -v "$PWD:/data" telikz/lazypm:latest start

docker-push:
	@docker push telikz/lazypm:latest

os-build: completions build
	@cp ./bin/pm ./build/pm
	@cp ./bin/pm_bash.sh ./build/pm_bash.sh
	@docker build -t telikz/lazyos ./build
	@echo "Built lazyos image successfully. You can run it using 'make os-run'."

os-run: os-build
	@docker run -d   --name=lazyos   -e PUID=1000   -e PGID=1000   -e TZ=Etc/UTC   -p 3000:3000   -p 3001:3001   --shm-size="1gb"   telikz/lazyos
	@echo "Started lazyos container successfully. You can access the web interface at http://localhost:3000."

os-stop:
	@docker stop lazyos
	@docker rm -v --force lazyos
	@echo "Stopped and removed lazyos container successfully."

os-push:
	@docker push telikz/lazyos

start:
	@go run ./cmd/pm start

cli: tidy
	go run ./cmd/pm

tui: tidy
	go run ./cmd/tui

web: tidy
	go run ./cmd/web

tw-install:
	@npm install tailwindcss@latest @tailwindcss/cli@latest @tailwindcss/typography daisyui@latest

# Run both dev and tw in parallel for generating templates and compiling Tailwind CSS on file changes
dev: tidy
	@go tool templ generate -watch -cmd "go run ./cmd/web"

tw: tw-install
	@npx --yes @tailwindcss/cli -i ./pkg/web/input.css -o ./pkg/web/assets/css/styles.css --watch --minify


completions:
	@mkdir -p ./bin
	@go build -o ./bin/pm ./cmd/pm
	@DEV=True ./bin/pm completion bash > ./bin/pm_bash.sh
	@DEV=True ./bin/pm completion zsh > ./bin/pm_zsh.sh
	@DEV=True ./bin/pm completion fish > ./bin/pm_fish.sh
	@DEV=True ./bin/pm completion powershell > ./bin/pm_powershell.ps1

install-bash-temp: completions
	@go install ./cmd/pm
	@source ./bin/pm_bash.sh

install-zsh-temp: completions
	@go install ./cmd/pm
	@source ./bin/pm_zsh.sh

install-fish-temp: completions
	@go install ./cmd/pm
	@source ./bin/pm_fish.sh

install-powershell-temp: completions
	@go install ./cmd/pm
	@source ./bin/pm_powershell.ps1


install-cli: completions
	@go install ./cmd/pm
	@sudo cp ./bin/pm_bash.sh /etc/bash_completion.d/pm


.PHONY: tidy clean build docker-build docker-run docker-push os-build os-run os-stop os-push start cli tui web tw-install dev tw completions install-bash-temp install-zsh-temp install-fish-temp install-powershell-temp install-cli
