# shellcheck shell=dash
xrc:mod:lib     pidid       seq

___x_cmd_pidid___main(){
    local op="$1"
    case "$op" in
        uuid|uuid_|vlid|int|int_|parse|seq|vlseqid)
            shift
            "___x_cmd_pidid_${op}" "$@"
            ;;
        "")
            ___x_cmd_pidid_int
            ;;
        -h|--help)
            M='pidid' help:ret:0 ;;
        *)
            ___x_cmd_pidid_parse "$@"
        ;;
    esac
}

___x_cmd_pidid_uuid_(){
    ___X_CMD_PIDID_UUID_="$(x date varname).$$.$(x rand uuid "$@")"
    _x="$___X_CMD_PIDID_UUID_"
}

___x_cmd_pidid_uuid(){
    local ___X_CMD_PIDID_UUID_
    ___x_cmd_pidid_uuid_ "$@"
    printf "%s\n" "$___X_CMD_PIDID_UUID_"
}

# TODO: JUST <TIMESTAMP>_<SUBSHELL_PID>
___x_cmd_pidid_int(){
    printf "%s\n" "$(x date varname).$$.$(x rand int 0 65535)"
}

___x_cmd_pidid_int_(){
    ___X_CMD_PIDID_INT_="$(x date varname).$$.$(x rand int 0 65535)"
    _x=$___X_CMD_PIDID_INT_
}

# Relevant: ___x_cmd_date_vlid
# Notcie: vlid = Vairable length ID
___x_cmd_pidid_vlid(){
    sh -c 'TZ=UTC0 command date +"%y%m%d_%H%M%S_$PPID"'
}

# _ is after 0-9 in ascii, it is suitable for the sort.
# testcase: ___x_cmd_pidid_vlseqid ___X_CMD_CHAT_REC;  ___x_cmd_pidid_vlseqid ___X_CMD_CHAT_REC; ___x_cmd_pidid_vlseqid ___X_CMD_CHAT_REC;
___x_cmd_pidid_vlseqid(){
    [ -n "$1" ] || M="Please provide namespace for vlseqid" N=x log:ret:64
    local name="___X_CMD_PIDID_VLSEQID_VAR_$1"
    local vlid; vlid=$(sh -c 'TZ=UTC0 command date +"%y%m%d_%H%M%S__$PPID"')

    local x_

    eval '
        if [ "${'"$name"'%__*}" = "$vlid" ]; then
            '"$name"'="$(( ${'"$name"'##*__} + 1 ))"
            x_="${vlid}__${'"$name"'}"
        else
            x_="$vlid"__0
        fi
        '"$name"'="$x_";
        printf "%s\n" "$x_"
    '
}

___x_cmd_pidid_parse(){
    :
}
