# shellcheck shell=dash
___x_cmd_mklink___win(){
    [ "$#" -gt 0 ] ||   set -- --help
    local ___X_CMD_MKLINK_WIN_RUN_ADMIN="$___X_CMD_MKLINK_WIN_RUN_ADMIN"
    local lntype="/J"
    local op="$1";
    case "$op" in
        -h|--help)          ___x_cmd help -m mklink; return 0 ;;
        -d|/d)              shift; lntype="/D"; ___X_CMD_MKLINK_WIN_RUN_ADMIN=1 ;;
        --hard|/h)          shift; lntype="/H" ;;
        -j|--junction|/j)   shift; lntype="/J" ;;
        *)                  ___x_cmd_mklink___win_run "$@" ; return ;;
    esac

    local target="$1"
    [ -e "$target" ] || N=mklink M="Please provide a valid target path" log:ret:64
    local x_=; ___x_cmd abspath_ "$target"  || return $?
    ___x_cmd pwsh path linux_to_win_ "$x_"  || return $?
    target="$x_"

    local link="$2"
    [ -n "$link" ] || N=mklink M="Please provide a new symbolic link name" log:ret:64
    ___x_cmd ensurefp "$link"               || return $?
    x_=; ___x_cmd abspath_ "$link"          || return $?
    ___x_cmd pwsh path linux_to_win_ "$x_"  || return $?
    link="$x_"

    ___x_cmd log :mklink info --link_type "$lntype" --link "$link" --target "$target" "Creating link"
    ___x_cmd_mklink___win_run "${lntype}" "$link" "$target"
}

___x_cmd_mklink___win_run(){
    local batfp="${___X_CMD_MKLINK_BAT_PATH:-"$___X_CMD_ROOT_MOD/mklink/lib/mklink.bat"}"
    if [ "$___X_CMD_MKLINK_WIN_RUN_ADMIN" != 1 ]; then
        local lntype="$1"
        case "$lntype" in
            /D|/H|/J) shift; set -- "/${lntype}" "$@" ;;
        esac
        "$batfp" "$@"
    else
        local x_=""; ___x_cmd pwsh path linux_to_win_ "$batfp" || return $?
        ___x_cmd pwsh admin "$x_ $*"
    fi
}
