# shellcheck shell=sh   disable=SC3043,2154

___x_cmd_cf_r2(){
    param:scope     ___x_cmd_cf
    param:subcmd    ___x_cmd_cf_r2              \
        bucket              "r2 bucket manage"          \
        object              "r2 object manage"


    param:subcmd:try
    param:run

    ___x_cmd_cf_r2  _param_help_doc
    return 1
}

___x_cmd_cf_r2_bucket(){
    param:scope     ___x_cmd_cf
    param:subcmd    ___x_cmd_cf_r2_bucket   \
        ls                  "List bucket"           \
        info                "Get bucket info"       \
        delete              "Delete bucket"         \
        create              "Creates bucket"


    param:subcmd:try
    param:run

    ___x_cmd_cf_r2_bucket  _param_help_doc
    return 1
}

# Section: bucket ls
# https://developers.cf.com/api/operations/r2-list-buckets
___x_cmd_cf_r2_bucket_ls(){
    param:scope     ___x_cmd_cf
    param:dsl       '
option:
    --cursor            "Pagination cursor received during the last List Buckets call"                      <>=""
    --direction         "Direction to order buckets"                                                        <>=""    = asc desc
    --order             "Field to order buckets by"                                                         <>=""
    --per_page          "Maximum number of buckets to return in a single call"                              <>:Number="20"
    --start_after       "Bucket name to start searching after. Buckets are ordered lexicographically"       <>=""
    --name_contains     "Bucket names to filter by"                                                         <>=""
    --json|-j           "output in json format"
'
    param:run
    ___x_cmd_cf_param_default
    
    if [ -n "$json" ] || [ -n "$ENFORCE_JSON" ]; then
        ___x_cmd_cf_curl get "/accounts/${account_id}/r2/buckets" per_page cursor direction start_after name_contains
    else
        ___x_cmd_cf_curl get "/accounts/${account_id}/r2/buckets" per_page cursor direction start_after name_contains | {
        x jo .result.buckets | x jo 2c .name .creation_date | x csv header --add Name CreationDate | x csv static_tab
        }
    fi
}
# EndSection

# Section: bucket info
# x cf r2 bucket info --bucket tet
# https://developers.cf.com/api/operations/r2-get-bucket
___x_cmd_cf_r2_bucket_info(){
    param:scope     ___x_cmd_cf
    param:dsl       '
option:
    --bucket           "Name of the bucket"                 <>:String
    --json|-j          "output in json format"
'
    param:run
    ___x_cmd_cf_param_default

    ___x_cmd_cf_curl get "/accounts/${account_id}/r2/buckets/${bucket}"
}
# EndSection

# Section: bucket create
# x cf r2 bucket create --name test111 --location_hint enam
# https://developers.cf.com/api/operations/r2-create-bucket
___x_cmd_cf_r2_bucket_create(){
    param:scope     ___x_cmd_cf
    param:dsl       '
option:
    --name                          "Name of the bucket"                 <>:String
    locationHint|--location_hint    "Location of the bucket"             <>=""      = apac eeur enam weur wnam
    --json|-j                       "output in json format"
'
    param:run
    ___x_cmd_cf_param_default

    local gen_cf_json=""
    gen_cf_json="$(param:option2json )"
    cf:debug  "data: $gen_cf_json"
    ___x_cmd_cf_curl post "/accounts/${account_id}/r2/buckets" gen_cf_json
}
# EndSection

# Section: bucket delete
# https://developers.cf.com/api/operations/r2-delete-bucket
___x_cmd_cf_r2_bucket_delete(){
    param:scope     ___x_cmd_cf
    param:dsl       '
option:
    --bucket            "Name of the bucket"                 <>:String
    --json|-j           "output in json format"
    --yes|-y            "Ignore remove prompt interception"
'
    param:run
    ___x_cmd_cf_param_default

    ___x_cmd_cf_curl delete "/accounts/${account_id}/r2/buckets/${bucket}"
}
# EndSection
