import _ from 'lodash';
import uppercamelcase from 'uppercamelcase';
import camelcase from 'camelcase';
// 不要使用自己的createElement方法，要使用parent的createElement方法，
// 函数式组件渲染 render(h,ctx){  let parentH = content.parent.$createElement; return h('组件名'，ctx.data,ctx.children)}
export default (component,name,lib,options={})=>{
    // 参数lib指该组件基于什么库开发，基于iview值为i，基于ant desigin值为a
    return {
        //驼峰命名规范字符串转换 例如ht-button 转换成 HtButton
        name:uppercamelcase(name),
        //设置成函数式组件
        functional:true,
        render (h, ctx) {
            let instance;
            let opts=_.merge({class:[],props:{},on:{},data:{}},options);
            if(opts.class instanceof Array){
                opts.class.push(name);
            }else{
                opts.class=[opts.class];
                opts.class.unshift(name);
            }

            if (ctx.data.class) {
              opts.class = [...opts.class, ...ctx.data.class]
            }

            //预处理钩子函数
            if(opts.preDispose){
                opts.preDispose(ctx,opts);
            }
            if(lib === 'a') {
                for(const key in ctx.listeners) {
                    let event = camelcase(key.replace(/^on-/,""));
                    opts.on[event] = ctx.listeners[key]
                }
            }
            if (typeof component === 'function'&&component.isRunInFC) {
              instance = component(ctx);
            } else {
              instance = component
            }
            let parentH=ctx.parent.$createElement;
            return parentH(
              instance,
                _.merge(
                    ctx.data,
                    opts,
                ),
                ctx.children
            )
        }
    }
}
