# shellcheck shell=sh
# shellcheck disable=SC2039,3043

# author:       Li Junhao           edwin.jh.lee@gmail.com    edwinjhlee.github.io
# maintainer:   Li Junhao

# NOTE: the docs is offline archives. run `docker run -it --rm -p 4000:4000 registry.gitlab.com/gitlab-org/gitlab-docs:13.7`
___x_cmd log init gcode
xrc api arg param ui
xrc:mod gx/lib/share
xrc:inner:lib gcode   utils cfg      avatar             snippet     \
    repo/index      group/index      group/member       group/repo  \
    user/index      user/repo        issue/index        _type/index \
    user/ssh        user/gpg         deploy/index        deploy/key \
    variable/group-variable
if ___x_cmd_is_suitable_advise_env; then
    xrc:mod:lib gcode advise
fi

___x_cmd_gcode(){
    local ___X_CMD_GCODE_LOCAL_CONFIG="${___X_CMD_GCODE_LOCAL_CONFIG}"
    local ___X_CMD_GCODE_LOCAL_PROFILE="${___X_CMD_GCODE_LOCAL_PROFILE}"
    while [ $# -gt 0 ]; do
        case "${1}" in
            :*:*)
                            ___X_CMD_GCODE_LOCAL_CONFIG="${1#:}"
                            ___X_CMD_GCODE_LOCAL_CONFIG="${___X_CMD_GCODE_LOCAL_CONFIG%%:*}"
                            ___X_CMD_GCODE_LOCAL_PROFILE="${1#:"$___X_CMD_GCODE_LOCAL_CONFIG":}"
                            shift 2
                            ;;
            :*)             ___X_CMD_GCODE_LOCAL_PROFILE="${1#:}";   shift   ;;
            --config)       ___X_CMD_GCODE_LOCAL_CONFIG="$2";        shift 2 ;;
            --profile)      ___X_CMD_GCODE_LOCAL_PROFILE="$2";       shift 2 ;;
            *=*)            ___x_cmd_gcode_cur "$@"; return ;;
            --init)         ___x_cmd_gcode_cfg_init "$@"; return ;;
            *)              break;;
        esac
    done

    arg:init gcode
    param:advise gcode
    param:subcmd ___x_cmd_gcode         \
        repo            "repo management"                   \
        issue           "issue management"                  \
        user            "user management"                   \
        group           "groups management"                 \
        subgroup        "subgroups management"              \
        avatar          "manage user addressbook for gcode" \
        deploy          "deployment management"             \
        snippet         "snippet management"                \
        --cfg           "manage configuration for gcode"    \
        --cur           "current CLI owner, repo"
    param:subcmd:try

    param:subcmd ___x_cmd_gcode_repo   \
        mr              "short cut for 'x gcode repo mr'"      \
        cl              "short cut for 'x gcode repo clone'"
    param:subcmd:try

    param:run

    ___x_cmd_gcode _param_help_doc
    return 1
}

___x_cmd_gcode____init(){
    ___X_CMD_GCODE_TMP="${___X_CMD_GCODE_TMP:-"${___X_CMD_ROOT_TMP}/gcode"}"
    # ___X_CMD_GCODE_CFG="${___X_CMD_GCODE_CFG:-"${___X_CMD_ROOT_CFG}/app.gitcode.config"}"
    # ___X_CMD_GCODE_ART="${___X_CMD_GCODE_ART:-"${___X_CMD_ROOT_ART}/gcode"}"
    # ___X_CMD_GCODE_CACHE="${___X_CMD_GCODE_CACHE:-"${___X_CMD_ROOT_CACHE}/gcode"}"

    x mkdirp "$___X_CMD_GCODE_TMP"
}

___x_cmd_gcode_cur(){
    param:void
    case "$1" in
        -h|--help)      _____x_cmd_gcode_help --cur     ;;
        *)              ___x_cmd_gcode_cfg current "$@" ;;
    esac
}

___x_cmd_gcode____init
xrc setmain ___x_cmd_gcode