# shellcheck shell=dash

___x_cmd_cd_relm___init(){
    ___x_cmd_cd_relm___init___common

    local x_;       ___x_cmd os name_
    case "$x_" in
        darwin)     ___x_cmd_cd_relm___init___darwin    ;;
        win)        ___x_cmd_cd_relm___init___windows   ;;

        *)
                    ___x_cmd_cd_relm___init___linux
                    ! ___x_cmd_is_termux || ___x_cmd_cd_relm___init___termux
                    ;;  # TODO: support freebsd, openbsd, netbsd
    esac

    local relm_file="$___X_CMD_CD_DATA/relm_custom"
    [ ! -f "$relm_file" ] || ___x_cmd_cd_util___dict_inner load relm_custom "$relm_file"
}

___x_cmd_cd_relm___init___common(){

    # not ready, only for advanced user
    # ___x_cmd_cd_relm___init_put x               "$___X_CMD_ROOT_CODE"
    # ___x_cmd_cd_relm___init_put xr              "$HOME/.x-cmd.root"
    # ___x_cmd_cd_relm___init_put xrg             "$HOME/.x-cmd.root/global"
    # ___x_cmd_cd_relm___init_put xrl             "$HOME/.x-cmd.root/local"

    # not ready
    # ___x_cmd_cd_relm___init_put gh              "gh://"
    # ___x_cmd_cd_relm___init_put gt              "gt://"
    # ___x_cmd_cd_relm___init_put gl              "gl://"
    # ___x_cmd_cd_relm___init_put gcode           "gcode://"

    # x-cmd dev team
    # ___x_cmd_cd_relm___init_put xbash           "gh://x-bash"
    # ___x_cmd_cd_relm___init_put xcmd            "gh://x-cmd"
    # ___x_cmd_cd_relm___init_put xpkg            "gh://x-cmd-pkg"
    # ___x_cmd_cd_relm___init_put xtheme          "gh://x-cmd-theme"

    # gd :xrl/cfg

    # module
    ___x_cmd_cd_relm___init_put gita            "${___X_CMD_GITA_CACHE:-"$___X_CMD_ROOT_SHARED/gita/DEFAULT/cache"}"
    ___x_cmd_cd_relm___init_put gitb            "${___X_CMD_GITB_CACHE:-"$___X_CMD_ROOT_SHARED/gitb/DEFAULT/cache"}"
    ___x_cmd_cd_relm___init_put gitc            "${___X_CMD_GITA_CACHE:-"$___X_CMD_ROOT_SHARED/gitc/DEFAULT/cache"}"

    [ -z "$TMPDIR" ] || ___x_cmd_cd_relm___init_put "tmp" "$TMPDIR"

    # search node modules, lua modules, pip, git

    # ___x_cmd_cd_relm___set "nm"  ".../Downloads"          # node_modules
    # ___x_cmd_cd_relm___set "git"  ".git"                  # .git directory

    # :http ==> http://
    # :https => https://
    # :ftp => ftp://
    # :docker => docker://
    # :ali => ali://

    # :git => git://
    # :ssh => ssh://
}

___x_cmd_cd_relm___init___linux(){
    ___x_cmd_cd_relm___init_put desk     "$HOME/Desktop"
    ___x_cmd_cd_relm___init_put doc      "$HOME/Documents"
    ___x_cmd_cd_relm___init_put down     "$HOME/Downloads"

    ___x_cmd_cd_relm___init_put snap      /snap/bin

    ! ___x_cmd os is wsl || ___x_cmd_cd_relm___init___wsl
}

___x_cmd_cd_relm___init___wsl(){
    ___x_cmd_cd_relm___init_put sys       /mnt/c/Windows/system32
    ___x_cmd_cd_relm___init_put win       /mnt/c/Windows
    # ___x_cmd_cd_relm___init_put system  /mnt/c/Windows/System32/Wbem
    ___x_cmd_cd_relm___init_put pwsh      /mnt/c/Windows/System32/WindowsPowerShell/v1.0/
    # ___x_cmd_cd_relm___init_put system  /mnt/c/Windows/System32/OpenSSH/
    ___x_cmd_cd_relm___init_put prog      "/mnt/c/Program Files"
    # ___x_cmd_cd_relm___init_put system  /mnt/c/Users/el/AppData/Local/Microsoft/WindowsApps

    ___x_cmd_cd_relm___init_put user      "/mnt/c/Users"
    ___x_cmd_cd_relm___init_put pf        "/mnt/c/Program Files"
    ___x_cmd_cd_relm___init_put pf86      "/mnt/c/Program Files (x86)"
    ___x_cmd_cd_relm___init_put trash     "/mnt/c/\$Recycle.Bin"

    local drive; for drive in /mnt/*; do
        case "$drive" in
            .)      ___x_cmd_cd_relm___init_put "$drive"   "/mnt/$drive"
        esac
    done 2>/dev/null
}

___x_cmd_cd_relm___init___darwin(){
    ___x_cmd_cd_relm___init_put icloud      "$HOME/Library/Mobile Documents/com~apple~CloudDocs"
    ___x_cmd_cd_relm___init_put desk        "$HOME/Desktop"
    ___x_cmd_cd_relm___init_put doc         "$HOME/Documents"
    ___x_cmd_cd_relm___init_put down        "$HOME/Downloads"

    ___x_cmd_cd_relm___init_put app         "$HOME/Appplications"

    ___x_cmd_cd_relm___init_put trash       "$HOME/trash"
}

___x_cmd_cd_relm___init___windows(){
    # consult gitbash
    ___x_cmd_cd_relm___init_put     bing     "$HOME"             # TODO: bing cloud position
    ___x_cmd_cd_relm___init_put     desk     "$HOME/Desktop"
    ___x_cmd_cd_relm___init_put     doc      "$HOME/Documents"
    ___x_cmd_cd_relm___init_put     down     "$HOME/Downloads"

    ___x_cmd_cd_relm___init_put     user      "/c/Users"
    ___x_cmd_cd_relm___init_put     pf        "/c/Program Files"
    ___x_cmd_cd_relm___init_put     pf86      "/c/Program Files (x86)"
    ___x_cmd_cd_relm___init_put     trash     "/c/\$Recycle.Bin"
}

___x_cmd_cd_relm___init___termux(){
    ___x_cmd_cd_relm___init_put     down     "$TERMUX__ROOTFS/home/storage/downloads"
    ___x_cmd_cd_relm___init_put     data     "$TERMUX__ROOTFS"

    ___x_cmd_cd_relm___init_put     usr      "$TERMUX__ROOTFS/usr"
    ___x_cmd_cd_relm___init_put     bin      "$TERMUX__ROOTFS/usr/bin"
    ___x_cmd_cd_relm___init_put     etc      "$TERMUX__ROOTFS/etc"
}

___x_cmd_cd_relm___init_put(){
    case "$2" in
        *://*)
            ___x_cmd_cd_util___dict_inner put relm_init "${1#:}" "$2"
            ;;
        *)
            local x_=; ___x_cmd_cd_relm___abs_dir_path "$2" || return $?
            ___x_cmd_cd_util___dict_inner put relm_init "${1#:}" "$x_"
            ;;
    esac
}

