# cat /usr/local/etc/rc.d/adguardhome
#!/bin/sh

# PROVIDE: adguardhome
# REQUIRE: DAEMON NETWORKING
# KEYWORD: shutdown

. /etc/rc.subr

name="adguardhome"
rcvar="${name}_enable"

load_rc_config "$name"

# ----  Default values  ----------------------------------------
: "${adguardhome_enable:=NO}"
: "${adguardhome_config:=/usr/local/etc/adguardhome/AdGuardHome.yaml}"
: "${adguardhome_user:=unbound}"      # NOT root! User must exist
: "${adguardhome_group:=unbound}"
: "${adguardhome_work_dir:=/var/db/adguardhome}"
: "${adguardhome_svcj_options:=net_basic}"
: "${adguardhome_extra:=}"                # extra options can be added here

# ----  Old location (migration)  ------------------------------
: "${adguardhome_config_old:=/usr/local/bin/AdGuardHome.yaml}"
: "${adguardhome_work_dir_old:=/usr/local/bin}"

# ----  Paths for logs and pid files  --------------------------
logfile="/var/log/${name}.log"
pidfile="/var/run/${name}.pid"

# ----  The command (without -u – rc.subr will add it)  --------
command="/usr/sbin/daemon"
command_args="-o ${logfile} -t ${name} -P ${pidfile} \
    /usr/local/bin/adguardhome -c ${adguardhome_config} -w ${adguardhome_work_dir} ${adguardhome_extra}"

# If we want to set HOME for the process (useful for some versions)
# Since the user's home directory is /var/db/adguardhome,
# we set it explicitly – this way `daemon` can create the
# environment even if the rc-scripts clear the environment.
adguardhome_env="HOME=${adguardhome_work_dir} IS_DAEMON=1"

# --------------------------------------------------------------
#  PRE-START – creates necessary directories and sets permissions
# --------------------------------------------------------------
start_precmd="${name}_prestart"
extra_commands="reload"

adguardhome_prestart()
{
    local _config_dir _file _dir
    _config_dir=$(dirname "${adguardhome_config}")

    # 1) Config directory (create if missing)
    if [ ! -d "${_config_dir}" ]; then
        echo "Creating configuration directory: ${_config_dir}"
        install -d -m 0750 -o "${adguardhome_user}" -g "${adguardhome_group}" "${_config_dir}"
    fi

    # 2) If config file already exists – fix ownership
    if [ -f "${adguardhome_config}" ]; then
        chown "${adguardhome_user}:${adguardhome_group}" "${adguardhome_config}"
    fi

    # 3) If old configuration exists – migrate it
    if [ -f "${adguardhome_config_old}" ] || [ -d "${adguardhome_work_dir_old}/data" ]; then
        if [ ! -f "${adguardhome_config}" ] && [ ! -d "${adguardhome_work_dir}/data" ]; then
            # 3.1) Move the old yaml
            if [ -f "${adguardhome_config_old}" ]; then
                echo "Moving old config ${adguardhome_config_old} → ${adguardhome_config}"
                mv "${adguardhome_config_old}" "${adguardhome_config}"
            fi
            # 3.2) Move the data
            if [ -d "${adguardhome_work_dir_old}/data" ]; then
                [ ! -d "${adguardhome_work_dir}" ] && install -d -m 0750 -o "${adguardhome_user}" -g "${adguardhome_group}" "${adguardhome_work_dir}"
                echo "Moving old data ${adguardhome_work_dir_old}/data → ${adguardhome_work_dir}/data"
                mv "${adguardhome_work_dir_old}/data" "${adguardhome_work_dir}/data"
            fi
        else
            # Both exist – issue a warning
            echo "(!!!) WARNING – both old and new configs exist!"
            echo "(!!!)   OLD : ${adguardhome_config_old} ${adguardhome_work_dir_old}/data"
            echo "(!!!)   NEW : ${adguardhome_config} ${adguardhome_work_dir}/data"
        fi
    fi

    # 4) Create/verify working directory
    if [ ! -d "${adguardhome_work_dir}" ]; then
        install -d -m 0750 -o "${adguardhome_user}" -g "${adguardhome_group}" "${adguardhome_work_dir}"
    fi

    # 5) Prepare log/pid files
    for _file in "${logfile}" "${pidfile}"; do
        [ -z "${_file}" ] && continue
        _dir=$(dirname "${_file}")
        # Създаваме директорията само ако не е стандартна системна такава
        if [ ! -d "${_dir}" ]; then
            install -d -m 0755 -o root -g wheel "${_dir}"
        fi
        touch "${_file}"
        chown "${adguardhome_user}:${adguardhome_group}" "${_file}"
    done
}

# --------------------------------------------------------------
run_rc_command "$1"
