# shellcheck shell=dash
xrc:mod:lib     colr    rainbow fz

___x_cmd_colr___main(){
    [ "$#" -gt 0 ]  || set -- fz

    local op="$1";  shift
    case "$op" in
        --help|-h)  ___x_cmd help -m colr ;;
        ls|fz)      ___x_cmd_colr___"$op" "$@" ;;

        # x11)        ___x_cmd_colr___x11 "$@" ;;
        # web)        ;;
        # 216 safe colors
        # safe)       ;;


        8|256)      ___x_cmd term "$op" ;;

        --blue)     ___x_cmd_colr___ls blue cyan auqa           ;;
        --pink)     ___x_cmd_colr___ls purple pink magenta      ;;
        --purple)   ___x_cmd_colr___ls blue purple magenta      ;;

        --red)      ___x_cmd_colr___ls red maroon pink          ;;
        --yellow)   ___x_cmd_colr___ls yellow orange            ;;
        --green)    ___x_cmd_colr___ls green azure olive lime   ;;
        --gray)     ___x_cmd_colr___ls gray                     ;;
        --black)    ___x_cmd_colr___ls gray black               ;;
        --white)    ___x_cmd_colr___ls gray white               ;;

        rainbow)    ___x_cmd_colr_rainbow                  "$@" ;;

        rgb)        ___x_cmd_colr___rgb                    "$@" ;;
        *,*,*)      ___x_cmd_colr___rgb "$op"                   ;;
        ??????)     ___x_cmd_colr___rgb "$op"                   ;;  # TODO: hex-decimal for true color search
        "#"??????)  ___x_cmd_colr___rgb "$op"                   ;;

        *)          ___x_cmd_colr___ls  "$op"              "$@" ;;
    esac
}

___x_cmd_colr___ls(){
    if ___x_cmd_is_stdout2tty; then     ___x_cmd_colr___ls_pipe "$@"
    else                                ___x_cmd_colr___ls_pipe "$@"
    fi
}

___x_cmd_colr___ls_pipe(){
    local IFS=","
    <"$___X_CMD_ROOT_MOD/colr/lib/data/data.tsv" \
    ___x_cmd_cmds_awk \
        -v criteria="$*" \
        -f "$___X_CMD_ROOT_MOD/colr/lib/awk/parse.awk"  \
        -f "$___X_CMD_ROOT_MOD/colr/lib/awk/filter.awk"
}

# TODO: tui will remove some color characters
___x_cmd_colr___ls_tty(){
    :
    # using csv to app
}

___x_cmd_colr___rgb(){
    local X_epsilon=25
    case "$1" in
        -e)     X_epsilon="$2"; shift 2 ;;
    esac

    local x_=
    case "$*" in
        "#"??????|??????)
            ___x_cmd_colr___torgb_code_ "$*"
            ;;
        *)
            x_="$*"
            ;;
    esac


    local IFS=","
    <"$___X_CMD_ROOT_MOD/colr/lib/data/data.tsv" \
    X_epsilon="$X_epsilon" ___x_cmd_cmds_awk \
        -v criteria="$x_" \
        -f "$___X_CMD_ROOT_MOD/colr/lib/awk/parse.awk"  \
        -f "$___X_CMD_ROOT_MOD/colr/lib/awk/rgb.awk"
}

___x_cmd_colr___torgb_code_() {
    color_code="${1#\#}"
    local ___x_cmd_theme_R="${color_code%????*}"
    color_code="${color_code#??}"
    local ___x_cmd_theme_G="${color_code%??*}"
    color_code="${color_code#??}"

    x_="$((0x${___x_cmd_theme_R})),$((0x${___x_cmd_theme_G})),$((0x${color_code}))"
}