HOST      = 172.16.0.214
SSH_USER  = root
SSH       = ssh $(SSH_USER)@$(HOST)
SCP       = scp

JAIL_NAME = cyclingbot
JAIL_ROOT = /jails/$(JAIL_NAME)
BINARY    = cycling-bot

.PHONY: all build deploy deploy-env restart stop logs status clean

all: build deploy start

# Cross-compile for FreeBSD amd64
build:
	GOOS=freebsd GOARCH=amd64 go build -o $(BINARY) .

# Create required directories inside the jail (safe to run multiple times)
setup:
	$(SSH) "mkdir -p $(JAIL_ROOT)/usr/local/bin \
	                  $(JAIL_ROOT)/usr/local/etc/rc.d \
	                  $(JAIL_ROOT)/var/db/$(JAIL_NAME) \
	                  $(JAIL_ROOT)/var/log \
	                  $(JAIL_ROOT)/var/run"

# Copy binary and rc.d script into the jail (via /tmp to avoid jail dir permission issues)
deploy: build setup
	$(SCP) $(BINARY) $(SSH_USER)@$(HOST):/tmp/$(BINARY)
	$(SCP) rc.d/$(JAIL_NAME) $(SSH_USER)@$(HOST):/tmp/$(JAIL_NAME)-rcd
	$(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop 2>/dev/null; \
	        rm -f $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \
	        cp /tmp/$(BINARY) $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \
	        chmod +x $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \
	        rm /tmp/$(BINARY) && \
	        rm -f $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \
	        cp /tmp/$(JAIL_NAME)-rcd $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \
	        chmod +x $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \
	        rm /tmp/$(JAIL_NAME)-rcd"

# Copy .env separately (run once — avoid overwriting production config)
deploy-env:
	$(SCP) .env \
		$(SSH_USER)@$(HOST):$(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env
	$(SSH) "chmod 600 $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env && \
	        chown 1001:1001 $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env"

start:
	$(SSH) "rm -f $(JAIL_ROOT)/var/run/$(JAIL_NAME).pid && \
	        jexec $(JAIL_NAME) service $(JAIL_NAME) start"

restart:
	$(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop 2>/dev/null; \
	        rm -f $(JAIL_ROOT)/var/run/$(JAIL_NAME).pid && \
	        jexec $(JAIL_NAME) service $(JAIL_NAME) start"

stop:
	$(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop"

logs:
	$(SSH) "jexec $(JAIL_NAME) tail -f /var/log/$(JAIL_NAME).log"

status:
	$(SSH) "jls && jexec $(JAIL_NAME) service $(JAIL_NAME) status"

clean:
	rm -f $(BINARY)
