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

___x_cmd_slack_webhook___setting_help(){
    printf "%s %s \n%s\n" \
        "$(___x_cmd_ui yellow 'Run command to add|repleace webhook:')" \
        "$(___x_cmd_ui bold cyan "\`x slack webhook <webhook>\`")" \
        "$(___x_cmd_ui 'https://api.slack.com/messaging/webhooks')" >&2
}

___x_cmd_slack_webhook(){
    param:subcmd ___x_cmd_slack_webhook         \
        set             "set webhook"           \
        get             "get webhook"           \
        unset           "unset webhook"
    param:subcmd:try

    param:dsl <<A
option:
    #1      "Provide webhook url"      <content>=""
A
    param:run

    if [ -z "$1" ]; then
        ___x_cmd_slack_webhook_get
    else
        ___x_cmd_slack_webhook_set "$1"
    fi
}

___x_cmd_slack_webhook_set(){
    param:dsl <<A
option:
    #1      "Provide webhook url"      <content>=""
A
    param:run

    local webhook_prefix="https://hooks.slack.com/services/"
    local webhook="${webhook_prefix}${1#"$webhook_prefix"*}"
    local cmd="___x_cmd_slack___curl '$webhook'"
    local config_path
    local res="invalid_token"

    if [ "invalid_payload" = "$(eval "$cmd")" ] ; then
        config_path=$(___x_cmd_slack___config_path webhook)
        printf "%s\n" "$webhook" > "$config_path"
        slack:info "Webhook url set to $config_path successfully"
    else
        slack:debug "Exec cmd: $cmd"
        slack:error "Webhook is invalid. res: $res"
        return 1
    fi
}

___x_cmd_slack_webhook_get(){
    param:void
    ___x_cmd_cmds_cat "$(___x_cmd_slack___config_path webhook)" || {
        slack:error "No webhook token found"
        ___x_cmd_slack_webhook___setting_help
        return 1
    }
}

___x_cmd_slack_webhook_unset(){
    param:void
    x rmrf "$(___x_cmd_slack___config_path webhook)"
    slack:info "Webhook url unset successfully"
}
