'use strict';
/*jslint node:true*/
const path = require('path');
/*这种以CommonJS的同步形式去引入其它模块的方式代码更加简洁:获取组件*/
const os = require('os');
const moment = require('moment');
const args = require('args');
const dev = process.env.NODE_ENV == 'development' || process.env.NODE_ENV == 'developmentVite';
const vite = process.env.NODE_ENV == 'developmentVite';

dev && console.log('\x1B[33m%s\x1b[0m', '请遵循并及时更新 readme.md,维护良好的开发环境,媛猿有责');
// // 启动参数
args.option(['p', 'port'], '启动端口');
args.option(['u', 'api-url'], 'webapi的URL');
args.option('apiPomsUrl', 'webapi的URL 外网可访问');
args.option('apiAnxinyunUrl', '安心云 api');
args.option('apiEmisUrl', '企业管理 api');
// 七牛
args.option('qnak', 'qiniuAccessKey');
args.option('qnsk', 'qiniuSecretKey');
args.option('qnbkt', 'qiniuBucket');
args.option('qndmn', 'qiniuDomain');

const flags = args.parse(process.argv);

const API_URL = process.env.API_URL || flags.apiUrl;
const API_POMS_URL = process.env.API_POMS_URL || flags.apiPomsUrl;
const API_EMIS_URL = process.env.API_EMIS_URL || flags.apiEmisUrl;
const API_ANXINYUN_URL = process.env.API_ANXINYUN_URL || flags.apiAnxinyunUrl;

// 七牛
const ANXINCLOUD_QINIU_AK = process.env.ANXINCLOUD_QINIU_ACCESSKEY || flags.qnak;
const ANXINCLOUD_QINIU_SK = process.env.ANXINCLOUD_QINIU_SECRETKEY || flags.qnsk;
const ANXINCLOUD_QINIU_BUCKET_RESOURCE = process.env.ANXINCLOUD_QINIU_BUCKET_RESOURCE || flags.qnbkt;
const ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE = process.env.ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE || flags.qndmn;


if (
   !API_URL
   || !API_ANXINYUN_URL
   || !ANXINCLOUD_QINIU_AK || !ANXINCLOUD_QINIU_SK || !ANXINCLOUD_QINIU_BUCKET_RESOURCE || !ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE) {
   console.log('缺少启动参数,异常退出');
   args.showHelp();
   process.exit(-1);
}

const product = {
   port: flags.port || 8080,
   staticDirs: [path.join(__dirname, './client')],
   mws: [{
      entry: require('./middlewares/proxy').entry,
      opts: {
         host: API_URL,
         match: /^\/_api\//,
      }
   }, {
      entry: require('./middlewares/proxy').entry,
      opts: {
         host: API_ANXINYUN_URL,
         match: /^\/_axy\//,
      }
   }, {
      entry: require('./middlewares/attachment').entry,
      opts: {
         qiniu: {
            accessKey: ANXINCLOUD_QINIU_AK,
            secretKey: ANXINCLOUD_QINIU_SK,
            bucket: ANXINCLOUD_QINIU_BUCKET_RESOURCE,
            domain: ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE
         },
         maxSize: 20971520, // 20M
         uploadPath: 'other'
      }
   }, {
      entry: require('./middlewares/proxy').entry,
      opts: {
         host: API_EMIS_URL,
         match: /^\/_emis\//,
      }
   }, {
      entry: require('./routes').entry,
      opts: {
         apiUrl: API_POMS_URL,
         staticRoot: './client',
         qiniu: {
            fetchUrl: '/_file-server',
            domain: ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE
         },
      }
   }, {
      entry: require('./client').entry,// 静态信息
      opts: {}
   }],
   logger: {
      level: 'debug',
      json: false,
      filename: path.join(__dirname, 'log', 'runtime.txt'),
      colorize: true,
      maxsize: 1024 * 1024 * 5,
      rotationFormat: false,
      zippedArchive: true,
      maxFiles: 10,
      prettyPrint: true,
      label: '',
      timestamp: () => moment().format('YYYY-MM-DD HH:mm:ss.SSS'),
      eol: os.EOL,
      tailable: true,
      depth: null,
      showLevel: true,
      maxRetries: 1
   }
};

let config;
if (dev) {
   config = {
      port: product.port,
      staticDirs: product.staticDirs,
      mws: product.mws
         .concat([
            vite ?
               {
                  entry: require('./middlewares/vite-dev').entry,
                  opts: {}
               }
               :
               {
                  entry: require('./middlewares/webpack-dev').entry,
                  opts: {}
               }
         ])
      ,
      logger: product.logger
   }
   config.logger.filename = path.join(__dirname, 'log', 'development.txt');
} else {
   config = product;
}

module.exports = config;//区分开发和发布