# shellcheck shell=dash disable=SC2086
___x_cmd_pwsh_service(){
    [ $# -gt 0 ] || set -- ls
    local op=
    case "$1" in
        ls|list)    op="list";        shift ;;
        start)      op="start";       shift ;;
        stop)       op="stop";        shift ;;
        restart)    op="restart";     shift ;;
        -h|--help)  ___x_cmd help -m pwsh service; return ;;
        *)          N=pwsh M="Unsupported subcmd => $1" log:ret:64  ;;
    esac

    "___x_cmd_pwsh_service_${op}" "$@"
}

___x_cmd_pwsh_service_list(){
    pwsh:arg:null
    local x_output_mode=; local x_output=
    local cmd="Get-Service"

    while [ $# -gt 0 ]; do
        pwsh:output:mode
        case "$1" in
            -d|--displayname)   cmd="${cmd} -displayname $2 ";         shift 2 ;;
            -n|--name)          cmd="${cmd} -Name $2 ";                shift 2 ;;
            -e|--exclude)       cmd="${cmd} -Exclude $2 ";             shift 2 ;;
            -i|--include)       cmd="${cmd} -Include $2 ";             shift 2 ;;
            *)                  cmd="${cmd} -Name $1"; shift ;;
        esac
    done

    [ "$x_output_mode" != app ] || {
        ___x_cmd_pwsh___exec "$x_output_mode" "$cmd" "$x_output" \
            | ___x_cmd csv tab - -3,1,6  \
            | ___x_cmd csv --app
        return
    }

    ___x_cmd_pwsh___exec "$x_output_mode" "$cmd" "$x_output"
}

___x_cmd_pwsh_service_start(){
    local cmd="Start-Service"
    if [ $# -eq 1 ]; then
        cmd="${cmd} -Name $1"
        shift
    fi

    while [ $# -gt 0 ]; do
        case "$1" in
            -n|--name)         cmd="${cmd} -Name $2 ";                shift 2 ;;
            -e|--exclude)   cmd="${cmd} -Exclude $2 ";             shift 2 ;;
            *)              N=pwsh M="Unsupported subcmd => $1" log:ret:64  ;;
        esac
    done
    ___x_cmd_pwsh_admin "$cmd"
}

___x_cmd_pwsh_service_stop(){
    local cmd="Stop-Service"
    local IS_FORCE=
    if [ $# -eq 1 ]; then
        cmd="${cmd} -Name $1"
        shift
    fi

    while [ $# -gt 0 ]; do
        case "$1" in
            -e|--exclude)   cmd="${cmd} -Exclude $2 ";             shift 2 ;;
            -i--include)    cmd="${cmd} -Include $2 ";             shift 2 ;;
            -n|--name)      cmd="${cmd} -Name $2 ";                shift 2 ;;
            --nowait)       cmd="${cmd} -NoWait $1 ";              shift 1 ;;
            -f|--force)     IS_FORCE=1;  shift 1 ;;
            *)              N=pwsh M="Unsupported subcmd => $1" log:ret:64  ;;
        esac
    done

    [ -n "$IS_FORCE" ] || ___x_cmd ui yesno "Are you sure you want to stop service ?" || return $?

    cmd="${cmd} -Force "
    ___x_cmd_pwsh_admin "$cmd"

}

___x_cmd_pwsh_service_restart(){
    local cmd="Start-Service"
    local IS_FORCE=
    if [ $# -eq 1 ]; then
        cmd="${cmd} -Name $1"
        shift
    fi

    while [ $# -gt 0 ]; do
        case "$1" in
            -d|--displayname)    cmd="${cmd} -displayname $2 ";         shift 2 ;;
            -e|--exclude)        cmd="${cmd} -Exclude $2 ";             shift 2 ;;
            -i|--include)        cmd="${cmd} -Include $2 ";             shift 2 ;;
            -n|--name)           cmd="${cmd} -Name $2 ";                shift 2 ;;
            -f|--force)          IS_FORCE=1;  shift 1 ;;
            *)                   N=pwsh M="Unsupported subcmd => $1" log:ret:64  ;;
        esac
    done

    [ -n "$IS_FORCE" ] || ___x_cmd ui yesno "Are you sure you want to restart service?" || return $?

    cmd="${cmd} -Force "
    ___x_cmd_pwsh_admin "$cmd"
}
