var adapter: any = require('./hemera')
var config: any = {}
export function init(cfg: any, callback?: Function) {
    switch (cfg.type) {
        case 'fast':
            adapter = require('./fast')
            break;
        default:
            adapter = require('./hemera')
            break;
    }
    config = cfg
    adapter.init(cfg, callback)
}

interface Pattern {
    pubsub$?: boolean
    timeout$?: number
    maxMessages$?: number
    expectedMessages$?: number
    [key: string]: any
}

export function add(args: Pattern, callback: Function) {
    if (adapter) {
        adapter.add(ckArgs(args), callback)
    }
}

export async function act(args: Pattern, isThrowError = false) {
    return adapter.act(ckArgs(args), isThrowError)
}

function ckArgs(args: Pattern) {
    if (!args) return;
    if (!args.topic) args.topic = config.name
    //if (!args.topic || !args.cmd) throw new Error('topic and cmd is null')
    if (args.topic) args.topic = args.topic.toLowerCase()
    if (args.cmd) args.cmd = args.cmd.toLowerCase()
    return args
}