.ONESHELL:
SHELL := /bin/bash

.PHONY: run stop status restart

PID_FILE   := .server.pid
PORT_FILE  := .server.port
LOG_FILE   := server.log
DOMAIN     := development.ngtools.com.br
HOST_IP    := 10.0.5.2
PORT_START := 7000
PORT_END   := 7020
ENTRY      := Vivo-Inventario.dc.html

run: stop
	PORT=""
	for p in $$(seq $(PORT_START) $(PORT_END)); do
		if ! (exec 3<>/dev/tcp/127.0.0.1/$$p) 2>/dev/null; then
			PORT=$$p
			break
		fi
		exec 3<&- 3>&- 2>/dev/null || true
	done
	if [ -z "$$PORT" ]; then
		echo "Nenhuma porta livre entre $(PORT_START) e $(PORT_END)."
		exit 1
	fi
	echo $$PORT > $(PORT_FILE)
	nohup python3 -m http.server $$PORT --bind 0.0.0.0 > $(LOG_FILE) 2>&1 &
	echo $$! > $(PID_FILE)
	sleep 1
	if ! kill -0 $$(cat $(PID_FILE)) 2>/dev/null; then
		echo "Falha ao iniciar servidor. Veja $(LOG_FILE)."
		exit 1
	fi
	echo ""
	echo "Rodando na porta $$PORT (PID $$(cat $(PID_FILE)))"
	echo "Local:   http://$(HOST_IP):$$PORT/$(ENTRY)"
	echo "Dominio: https://$$PORT.$(DOMAIN)/$(ENTRY)  (-> $(HOST_IP):$$PORT)"
	echo ""

stop:
	if [ -f $(PID_FILE) ] && kill -0 $$(cat $(PID_FILE)) 2>/dev/null; then
		kill $$(cat $(PID_FILE))
		echo "Servidor (PID $$(cat $(PID_FILE))) parado."
	fi
	rm -f $(PID_FILE) $(PORT_FILE)

restart: run

status:
	if [ -f $(PID_FILE) ] && kill -0 $$(cat $(PID_FILE)) 2>/dev/null; then
		PORT=$$(cat $(PORT_FILE))
		echo "Rodando na porta $$PORT (PID $$(cat $(PID_FILE)))"
		echo "Local:   http://$(HOST_IP):$$PORT/$(ENTRY)"
		echo "Dominio: https://$$PORT.$(DOMAIN)/$(ENTRY)  (-> $(HOST_IP):$$PORT)"
	else
		echo "Nao esta rodando."
	fi
