# shellcheck shell=dash

___x_cmd_hub_keypair_gen(){
    local X_help_cmd='___x_cmd_hub___help keypair gen'
    help:arg:parse

    local x_=; ___x_cmd_hub_keypair___keypath_ "$___X_CMD_HUB_KEYPAIR_NAME" private || return 1
    local prikey_path="$x_"
    x_=; ___x_cmd_hub_keypair___keypath_ "$___X_CMD_HUB_KEYPAIR_NAME" public || return 1
    local pubkey_path="$x_"

    if [ -f "$prikey_path" ] || [ -f "$pubkey_path" ]; then
        hub:error "Key already exists, $prikey_path or $pubkey_path"
        return 1
    fi

    hub:debug "Step1 => Generated private key"
    ___x_cmd openssl genrsa -out "$prikey_path" 2048 || {
        hub:error "Failed to generate private key"
        return 1
    }

    hub:debug "Step2 => Generated public key"
    ___x_cmd openssl rsa -in "$prikey_path" -pubout -out "$pubkey_path" >/dev/null || {
        hub:error "Failed to generate public key"
        return 1
    }

    hub:info "Key '$___X_CMD_HUB_KEYPAIR_NAME' generated, and now saving..."
    ___x_cmd_hub_keypair_save "$___X_CMD_HUB_KEYPAIR_NAME" || {
        hub:error "Failed to save key"
        ___x_cmd rm -f "$prikey_path" "$pubkey_path"
        return 1
    }
}
