#!/bin/sh /etc/rc.common
# SecuBox HAProxy Service
# Copyright (C) 2025 CyberMind.fr

START=90
STOP=10
USE_PROCD=1

NAME="haproxy"
PROG="/usr/sbin/haproxyctl"
ACME_WEBROOT="/var/www/acme-challenge"
ACME_PORT="8402"

# Setup ACME challenge webserver for certificate issuance
# HAProxy routes /.well-known/acme-challenge/ to this server
setup_acme_webserver() {
	# Create ACME challenge directory
	mkdir -p "$ACME_WEBROOT/.well-known/acme-challenge"
	chmod -R 755 "$ACME_WEBROOT"

	# Configure uhttpd instance for ACME if not exists
	if ! uci -q get uhttpd.acme >/dev/null 2>&1; then
		uci set uhttpd.acme=uhttpd
		uci set uhttpd.acme.listen_http="0.0.0.0:$ACME_PORT"
		uci set uhttpd.acme.home="$ACME_WEBROOT"
		uci commit uhttpd
		/etc/init.d/uhttpd restart 2>/dev/null || true
	fi

	# Ensure uhttpd is listening on ACME port
	if ! netstat -tln 2>/dev/null | grep -q ":$ACME_PORT "; then
		/etc/init.d/uhttpd restart 2>/dev/null || true
	fi
}

start_service() {
	local enabled
	config_load haproxy
	config_get enabled main enabled '0'

	[ "$enabled" = "1" ] || return 0

	# Ensure ACME challenge webserver is configured and running
	setup_acme_webserver

	# Sync ACME certificates to HAProxy format before starting
	/usr/sbin/haproxy-sync-certs 2>/dev/null || true

	procd_open_instance
	procd_set_param command "$PROG" service-run
	procd_set_param respawn 3600 5 0
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_set_param pidfile /var/run/haproxy.pid
	procd_close_instance
}

stop_service() {
	"$PROG" service-stop
}

reload_service() {
	"$PROG" reload
}

restart_service() {
	stop
	start
}

service_triggers() {
	procd_add_reload_trigger "haproxy"
}
