'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';

dev && console.log('\x1B[33m%s\x1b[0m', '请遵循并及时更新 readme.md,维护良好的开发环境,媛猿有责');
// // 启动参数
args.option(['p', 'port'], '启动端口');
args.option(['u', 'api-url'], 'webapi的URL');
args.option('apiHrUrl', 'webapi的URL 外网可访问');

// 七牛
args.option('qnak', 'qiniuAccessKey');
args.option('qnsk', 'qiniuSecretKey');
args.option('qnbkt', 'qiniuBucket');
args.option('qndmn', 'qiniuDomain');
args.option('pmrs', 'pmReportService');

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

const API_URL = process.env.API_URL || flags.apiUrl;
const API_DC_URL = process.env.API_DC_URL || flags.apiHrUrl;

// 七牛
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;
//后端服务
const ANXINCLOUD_PM_SERVICES = process.env.ANXINCLOUD_PM_SERVICES || flags.pmrs;


if (
   !API_URL
   || !API_DC_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/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('./routes').entry,
      opts: {
         apiUrl: API_DC_URL,
         staticRoot: './client',
         qiniu: {
            fetchUrl: '/_file-server',
            domain: ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE
         },
         service: {
            url: ANXINCLOUD_PM_SERVICES
         }
      }
   }, {
      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([
            {
               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;//区分开发和发布