let SANBOX = require('./z_sanbox/qxVm.sanbox');


function QXVm_help(){
    console.log(`
:params js_code          用户自己的代码(可以是一个文件得绝对路径)
:params func_name        需要导出的方法
:params user_config      个性浏览器环境
    user_config:{
        isTest: Boolean             // 如果测试则固定随机数种子, 时间戳
        compress: Boolean,          // 是否压缩js, 针对 ob,sojson 检测格式化
        runConfig: Object {         // 运行中的配置
            proxy: false,           // 是否代理(默认false)
            logOpen: true           // 是否日志打印(调试模式)
        }
        canvas: String,             // 自定义canvas指纹
        window_attribute: Object,   // 自定义window属性(暴露window出来)
        plugin: Array,              // 自定义浏览器插件
        env: Object {               // 自定义浏览器环境
            navigator: Object,      // 针对 加密UA和请求UA必须一致的情况
            location: Object,       // 自定义属性
            document: Object        // 自定义属性
        }
    }
    `)
}



/**
 * 注册 express APP
 * @returns express
 */
 function QXVM_registerServer() {
    let APP = express();
    APP.use(express.json({ limit: '50mb' }));
    APP.use(express.urlencoded({ limit: '50mb', extended: true }));
    APP.use(bodyParser.json({ limit: '10mb', extended: true }));
    return APP;
}


/**
 * 注册server回调,是否开始server,取决与port是否不为空
 * @param {String} method      get|post
 * @param {String} route       路由
 * @param {Number} port        端口, 如果端口为空, 则不开启服务
 * @param {Function} callback  回调
 */
function QXVM_registerCallback(method, route, port, callback) {
    let APP = QXVM_registerCallback.APP || (() => {
        QXVM_registerCallback.APP = QXVM_registerServer();
        return QXVM_registerCallback.APP;
    })()

    method = method.toLowerCase();
    APP[method](route, callback);
    if (port !== undefined && TOOLS.isNumber(port)) {
        APP.listen(port, () => {
            console.log(`框架服务开启 ${port} 端口`);
        });
    }
}




module.exports = {
    sanbox: SANBOX.QXVm_sanbox,
    help: QXVm_help,
    registerServer: QXVM_registerServer,
    registerCallback: QXVM_registerCallback,
};
