export {Model} from './model'
export {Control,Sync,fetch} from './control'
export {View} from './view'
export {enumerable as action,noenumerable} from './decorator'
//export {binding} from './valuelink'

import extend from 'extend'
import RTools from 'gfs-react-tools'
import {getModels,emptyModels} from './model'
import thunkMiddleware from 'redux-thunk'

/**
 * 提供Model、View、Control、Sync、RTools等系列便捷类库
 * @module gfs-react-mvc
 * */

/**
 * 页面渲染
 * @class Page
 * */

/**
 *
 * @method page
 * @param opts {object} 可以直接等于react component
 * @param opts.middleware {array} 可选,中间件集合
 * @param opts.module {react component} 必填,需要渲染在页面的组件
 * @param opts.devTools {object} 可选,数据模型调试,可视化面板,可以查看数据模型结构
 * @param opts.bar {object} 可选,异步数据请求时加载状态栏
* @param opts.debug {Boolean} 可选,是否是调试状态,调试状态下会输出日志信息
 * @param opts.agent {string} 可选,默认值为pc,三种可选值:pc、wap、other,other已bar字段对象为准
 * @param opts.container {string} 可选,默认为root,组件放在页面的容器id
 * @return RTools
 * @example
 *
 *      imoprt {page} from 'gfs-react-mvc'
 *      import Module from './TestComponent'
 *
 *      //渲染到页面
 *      page(Module)
 * */
export function page(opts={}){

    if(opts && typeof(opts.module) === 'undefined'){
        opts = {
            module:opts
        }
    }

    opts.middleware = [thunkMiddleware].concat(opts.middleware||[])

    if(opts.debug || (typeof(opts.debug)=='undefined' &&location&& location.port!='') ){
        opts.middleware.push(require('redux-logger')() )
    }

    let rtools = new RTools(extend({
        //可选
        middleware:[],
        //必填
        module:null,
        //可选
        reducers:getModels(),
        //可选n
        //devTools:DevTools,
        //可选 默认loadingbarComponent
        //bar:null,
        //可选  loadingbar平台(pc/wap/other)other直接使用bar字段作为参数
        //agent:'pc',
        //可选  react component放取的节点id
        container:'root',
        debug:false
    },opts) )

    emptyModels()

    return rtools
}