# shellcheck shell=sh disable=SC3043,2002,SC2154

# x gt org apply org.yml lijunhao=edwinjhlee zhengyuhang=mnnna
# cat org.yml | x gt org apply - lijunhao=edwinjhlee

___x_cmd_gt_org_apply(){
    param:void
    if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then _____x_cmd_gt_help org apply; return;
    fi

    [ -n "$1" ] || M='accepts 1 arg(apply file path), received empty' arg:ret:64
    local filepath="$1"; shift

    local code; if code="$(
        {
            ___x_cmd_gt_org_apply___parse_data | {
                x jo env . content=. org=.org  apply_membership=.membership
                [ -n "$org" ] || { gt:error "Not found apply configure 'org' main key" >/dev/stderr; return 1; }

                ___x_cmd_gt_org_apply__replace_args "$@"
                printf "%s\n" "$content"
                gt:info "Getting org info ..."
                ___x_cmd_gt_org_apply__org_info
                ___x_cmd_gt_org_apply__membership_info
            }
        } | {
            ___x_cmd_cmds_awk -f "$___X_CMD_ROOT_MOD/awk/lib/core.awk" \
                -f "$___X_CMD_ROOT_MOD/awk/lib/sh.awk" \
                -f "$___X_CMD_ROOT_MOD/awk/lib/j/json.awk"  \
                -f "$___X_CMD_ROOT_MOD/awk/lib/j/jiter.awk" \
                -f "$___X_CMD_ROOT_MOD/gt/lib/awk/org/membership.awk" \
                -f "$___X_CMD_ROOT_MOD/gt/lib/awk/org.awk" \
                -f "$___X_CMD_ROOT_MOD/gt/lib/awk/replace.awk" \
                -f "$___X_CMD_ROOT_MOD/gt/lib/org/apply.awk"
        }
    )"; then
        gt:debug "apply code $code"
        [ -n "$code" ] || {
            printf "%s\n" ""; gt:info "Org apply no changes required"
            return 0
        }
        gt:info "Handling Org by info ..."
        if [ -n "$___X_CMD_GT_DRY_RUN" ]; then      printf "%s\n" "$code";
        else                                        eval "$code";
        fi
        # echo "$code"
    else
        code=$?
        gt:error "Exit=$code. Fail to apply $filepath" >/dev/stderr
    fi
}

___x_cmd_gt_org_apply___parse_data(){
    case "$filepath" in
        -)              ___x_cmd_cmds_cat | x y2j ;;
        *.json)         ___x_cmd_cmds_cat "$filepath" ;;
        *)              <"$filepath" x y2j ;;
    esac
}

# shellcheck disable=SC2154
___x_cmd_gt_org_apply__membership_info(){
    [ -n "$apply_membership" ] || { printf "\n"; return 0; }

    NO_CACHE=1 x gt org membership ls --json --org "$org" | x ja t "\t" ; printf "\n"
    # ___x_cmd_cmds_cat "$(x wsroot)"/.x-cmd/org-member.json | x ja t "\t" ; printf "\n"
}

___x_cmd_gt_org_apply__org_info(){
    NO_CACHE=1  x gt org info --json "$org" | x ja t "\t" ; printf "\n"
    # ___x_cmd_cmds_cat "$(x wsroot)"/.x-cmd/org-info.json | x ja t "\t" ; printf "\n"
}

___x_cmd_gt_org_apply__replace_args(){
    if [ $# -gt 0 ]; then
        local IFS=","; printf "replace:%s\n" "$*"
        return
    fi
    # ___x_cmd_cmds_cat "$(x wsroot)"/.x-cmd/lteam-member.yml | x y2j | x ja t "\t" ; printf "\n"
}
