# shellcheck shell=dash

___x_cmd_daemon_proc_begin(){
    local fp="${1:?Provide filepath}"; shift
    local IFS=" "
    printf "%s: %s\n" PID "$$"
    printf "%s: %s\n" FP "$fp"
    printf "%s: %s\n" CMD "$*"
    # printf "PID: %s\nFP: %s\nCMD: %s\n" "$$" "$fp" "$*"
}

___x_cmd_daemon_proc_end(){
    printf "%s: %s\n" CODE "$1"
}

___x_cmd_daemon_proc_run(){
    trap '' INT
    local id="${1:?Provide id}"; shift
    local ___X_CMD_DAEMON_PROC_RUN_FILEPATH="${___X_CMD_DAEMON_PROC_FILEPATH}/$id"
    x ensurefp "$___X_CMD_DAEMON_PROC_RUN_FILEPATH"

    ___x_cmd_daemon_proc_begin "$___X_CMD_DAEMON_PROC_RUN_FILEPATH" "$@" >>"${___X_CMD_DAEMON_PROC_RUN_FILEPATH}"
    x outerr pack "$@"

    # read-only variable: status
    local _status=$?
    ___x_cmd_daemon_proc_end "${_status}" >>"${___X_CMD_DAEMON_PROC_RUN_FILEPATH}"
    return "${_status}"
}

___x_cmd_daemon_proc(){
    local op="$1"; [ "$#" -eq 0 ] || shift
    case "$op" in
        run|begin|end)
            ___x_cmd_daemon_proc_"$op" "$@" ;;
        -h|--help)
            x help -m daemon proc ;;
        *)
            x help -m daemon proc >&2; return 64 ;;
    esac
}
