let interceptors = {};

let types = {
    "view":'view',
    "route":'view',
    "start":"start",
    "navigate":"navigate"
}
/**
 * 注册拦截器
 * @param type 拦截器的执行类型
 * @param handler 拦截器的处理函数，不停的拦截器入参有不同的参数入参
 */
exports.registerInterceptor  = function (type,handler) {
    type = types[type];
    interceptors[type] = interceptors[type]||[];
    interceptors[type].push(handler);
    return this;
};

/**
 * 执行拦截器，
 * @param type 需要执行的拦截器的类型
 * @param args 执行拦截器时候注入的入参
 * @param cb 成功之后的拦截器回调
 * @param index
 */
exports.runInterceptor = function (type,args,cb,index) {
    index = index||0;
    if(interceptors[type] && interceptors[type].length>0 && index< interceptors[type].length){
        interceptors[type][index].apply(null,args.concat([function () {
            exports.runInterceptor(type,args,cb,index+1)
        }]));
    }else{
        cb();
    }
};

exports.getInterceptor = function (type) {
    return interceptors[type]||[];
}