# run templ generation in watch mode to detect all .templ files and 
# re-create _templ.txt files on change, then send reload event to browser. 
# Default url: http://localhost:7331
live/templ:
	templ generate --watch --proxy="http://localhost:9512" --open-browser=false -v

build/templ:
	templ generate

# run air to detect any go file changes to re-build and re-run the server.
live/server:
	go run github.com/air-verse/air@v1.61.1 \
	--build.cmd "go build -o tmp/bin/main" --build.bin "tmp/bin/main" --build.delay "100" \
	--build.exclude_dir "node_modules" \
	--build.include_ext "go" \
	--build.stop_on_error "false" \
	--misc.clean_on_exit true

# run tailwindcss to generate the *.css bundle in watch mode.
live/tailwind:
	npx tailwindcss -i ./view/styles/* -o ./assets/global.css
	npx tailwindcss -o ./assets/styles.css --watch

build/tailwind:
	npx tailwindcss -i ./view/styles/* -o ./assets/global.css --minify
	npx tailwindcss -o ./assets/styles.css --minify

# run esbuild to generate the index.js bundle in watch mode.
live/esbuild:
	npx esbuild js/index.ts --bundle --outdir=assets/ --watch=forever

build/esbuild:
	npx esbuild js/index.ts --bundle --outdir=assets/ --minify

# watch for any js or css change in the assets/ folder, then reload the browser via templ proxy.
live/sync_assets:
	go run github.com/air-verse/air@v1.61.1 \
	--build.cmd "templ generate --notify-proxy" \
	--build.bin "true" \
	--build.delay "100" \
	--build.exclude_dir "" \
	--build.include_dir "assets" \
	--build.include_ext "js,css"

# start all 5 watch processes in parallel.
live: 
	ENVIRONMENT="DEVELOPMENT" make -j5 live/tailwind live/templ live/server live/esbuild live/sync_assets

# ENABLE: https://templ.guide/syntax-and-usage/raw-go/
# https://templ.guide/commands-and-tools/live-reload-with-other-tools/

build:
	make -j3 build/tailwind build/templ build/esbuild
	go build -ldflags="-s -w"