# shellcheck shell=dash disable=SC2046

___x_cmd_uuid___main(){
    [ "$#" -gt 0 ] ||       set -- get

    local op="$1";          shift
    case "$op" in
        -h|--help)          ___x_cmd help -m uuid "$@";    return 0 ;;
        get|get_|v4|v4_|pv4|pv4_|v7|v7_|pv7|pv7_|parsev7|parsev7_)
                            ___x_cmd_uuid_"$op" "$@" ;;
        *)                  N=uuid M="Unknown subcmd -> $op" log:ret:64 ;;
    esac
}

___x_cmd_uuid___v4_(){
    if [ -f /proc/sys/kernel/random/uuid ]; then    # Linux like alpine, debian. For dash
        read -r x_ </proc/sys/kernel/random/uuid
    elif ___x_cmd_hascmd uuid; then                 # Linux
        x_="$(___x_cmd_cmds uuid)"
    elif ___x_cmd_hascmd uuidgen; then              # macOS/BSD
        x_="$(___x_cmd_cmds uuidgen)"
    else
        return 1
    fi
}

___x_cmd_uuid___v4(){
    if [ -f /proc/sys/kernel/random/uuid ]; then    # Linux like alpine, debian. For dash
        local x_
        read -r x_ </proc/sys/kernel/random/uuid
        printf "%s\n" "$x_"
    elif ___x_cmd_hascmd uuid; then                 # Linux
        ___x_cmd_cmds uuid
    elif ___x_cmd_hascmd uuidgen; then              # macOS/BSD
        ___x_cmd_cmds uuidgen
    else
        return 1
    fi
}

___x_cmd_uuid_v4_(){
    ___x_cmd_uuid___v4_     || ___x_cmd_uuid_pv4_
}

___x_cmd_uuid_v4(){
    ___x_cmd_uuid___v4      || ___x_cmd_uuid_pv4
}

___x_cmd_uuid_get_(){
    ___x_cmd_uuid_v4_
}

___x_cmd_uuid_get(){
    ___x_cmd_uuid_v4
}

___x_cmd_uuid_parsev7(){
    local uuidv7="${1%-*-*-*}"
    printf "%d\n" "0x${uuidv7%-*}${uuidv7#*-}"
}

___x_cmd_uuid_parsev7_(){
    local uuidv7="${1%-*-*-*}"
    ___x_cmd printf_ "%d" "0x${uuidv7%-*}${uuidv7#*-}"
}

___x_cmd_uuid_v7(){
    local x_
    if ___x_cmd_uuid___v4_; then
        local rest="${x_#*-*-?}"
        ___x_cmd_uuid_pv7_ts_
        printf "%s\n" "${x_}${rest}"
    else
        ___x_cmd_uuid_pv7
    fi
}

___x_cmd_uuid_v7_(){
    if ___x_cmd_uuid___v4_; then
        local rest="${x_#*-*-?}"
        ___x_cmd_uuid_pv7_ts_
        x_="${x_}${rest}"
    else
        ___x_cmd_uuid_pv7_
    fi
}

___x_cmd_uuid_pv4(){
    local x_
    ___x_cmd_uuid_pv4_ || return $?
    printf "%s\n" "$x_"
}

___x_cmd_uuid_pv4_(){
    local IFS=" ${___X_CMD_UNSEENCHAR_HT}"
    set -- $(___x_cmd_cmds od -An -tx1 -N16 /dev/urandom)
    local vn="${9%"${9#?}"}"
    case "$(( 0x${vn} % 4 ))" in 0) vn=8 ;; 1) vn=9 ;; 2) vn=a ;; *) vn=b ;; esac
    x_="$1$2$3$4-$5$6-4${7#?}$8-${vn}${9#?}${10}-${11}${12}${13}${14}${15}${16}"
}

# pure v7 generartion
___x_cmd_uuid_pv7(){
    local x_
    ___x_cmd_uuid_pv7_
    printf "%s\n" "$x_"
}

___x_cmd_uuid_pv7_(){
    x_=""
    ___x_cmd_uuid_pv7_ts_

    local IFS=" ${___X_CMD_UNSEENCHAR_HT}"
    set -- $(___x_cmd_cmds od -An -tx1 -N16 /dev/urandom)
    local vn="${9%"${9#?}"}"
    case "$(( 0x${vn} % 4 ))" in 0) vn=8 ;; 1) vn=9 ;; 2) vn=a ;; *) vn=b ;; esac
    x_="${x_}${7#?}$8-${vn}${9#?}${10}-${11}${12}${13}${14}${15}${16}"
}

___x_cmd_uuid_pv7_ts_(){
    ___x_cmd epoch ms_
    ___x_cmd printf_ "%012x" "$x_"
    local prefix="${x_%????}"
    x_="${prefix}-${x_#"${prefix}"}-7"
}
