# shellcheck shell=dash disable=SC2016
# x version release sync
# x version release sync all [version]
# x version release sync gh/gt/cb [version]
# x version release syncall gh/gt/cb [version]

___x_cmd_version___release_sync(){
    local repo="x-cmd/x-cmd"
    local title
    local version
    local state="";

    while [ $# -gt 0 ];do
        case "${1}" in
            --title)
                        title="${2}"
                        [ $# -ge 2 ] || M="Please provide title"  log:ret:64
                        shift 2 ;;
            *)          break ;;
        esac
    done

    local mod="all"
    local version_data="$( ___x_cmd_version_ls_json | ___x_cmd ja 'kpglob("1", "*"){if(v()=="{")print  k()}')"

    local cur_version
    local old_version
    {
        read -r cur_version
        read -r old_version
    }<<A
$version_data
A
    # latest="$(___x_cmd_version_ls_json | ___x_cmd jq -r '. | keys | sort | reverse | .[0]')"
    mod="${1:-"$mod"}"
    version="${2:-"$cur_version"}"

    local beta="$( ___x_cmd_version_ls_json | ___x_cmd jq -r ".[\"$version\"].beta" )"
    [ "$beta" != "true" ] || state="--prerelease"

    ___x_cmd_version___release_sync_ "$version" "$title"
    [ "$version" != "$cur_version" ] || {
        ___x_cmd_version___release_sync_ "$old_version"
    }
}

___x_cmd_version___release_sync_(){
    local version="$1"
    local title="$2"
    if [ -z "$title" ]; then
        title="$(___x_cmd_version_ls_json | ___x_cmd jq -r ".[\"$version\"].name")"
        [ -n "$title" ] || title="$version"
    fi
    local desc
    desc="$(___x_cmd version release tomd "$version")"
    ___x_cmd_version___release_sync_"${mod}"
}

___x_cmd_version___release_sync_gh(){
    local release_id
    ___x_cmd_version___release_sync_getid "gh" || return 1
    ___x_cmd gh repo release edit --repo "$repo" --body "$desc" --name "$title" "$state" "$release_id"
}

___x_cmd_version___release_sync_gt(){
    local release_id
    ___x_cmd_version___release_sync_getid "gt" || return 1
    local gt_desc
    gt_desc="$(printf "%s" "$desc" \
        | ___x_cmd_cmds awk '{ gsub("github.com/x-cmd/x-cmd/compare", "gitee.com/x-cmd/x-cmd/compare", $0); print $0 }')"
    ___x_cmd gt repo release edit --repo "$repo" --body "$gt_desc" --name "$title" --tag "$version" "$state" "$release_id"
}

___x_cmd_version___release_sync_cb(){
    local release_id
    ___x_cmd_version___release_sync_getid "cb" || return 1
    local cb_desc
    cb_desc="$(printf "%s" "$desc" \
        | ___x_cmd_cmds awk '{ gsub("github.com/x-cmd/x-cmd/compare", "codeberg.org/x-cmd/x-cmd/compare", $0); print $0 }')"
    ___x_cmd cb repo release edit --repo "$repo" --body "$cb_desc" --name "$title" "$state" "$release_id"
}

___x_cmd_version___release_sync_getid(){
    local mod="$1"
    release_id="$(___x_cmd "$mod" repo release ls --csv --repo "$repo" \
        | ___x_cmd csv awk -v version="$version" '{ if( cval(3) ~ version ) print cval(1) }' )"
    [ -n "$release_id" ] || N=x M="not found release" log:ret:1
}

___x_cmd_version___release_sync_all(){
    local mod;
    for mod in gh gt cb; do
        ___x_cmd_version___release_sync_"$mod"
    done
}

___x_cmd_version___release_syncall(){
    local mod="${1:-"all"}"
    local version
    ___x_cmd_version_ls_json | ___x_cmd jq -r '. | keys | sort | reverse | .[]' \
        | while read -r version; do
            ___x_cmd_version___release_sync "$mod" "$version"
    done
}
