/**
 * Example : 
 * node build.js optimize=true exclude=map,force,line output=echarts.js plain=true
 * @param optimize 是否压缩, 默认false
 * @param exclude 不打包的图表，多个图表使用逗号分割, 默认使用所有图表
 * @param output 输出打包地址，默认为echarts.js
 * @param plain 是否打包esl, 打包的话可以直接使用scripts标签引入, 默认false
 */
var fs = require('fs');
var spawn = require('child_process').spawn;

var args = {};
process.argv.slice(2).forEach(function (val) {
    var keyVal = val.split('=');
    args[keyVal[0]] = keyVal[1];
});

var outputFile = args['output'] || 'echarts.js';
var exclude = args['exclude'] ? args['exclude'].split(',') : [];
var plain = args['plain'] === 'true' ? true : false;
var optimize = args['optimize'] === 'true' ? true : false;

var configTplStr = fs.readFileSync('./config-tpl.js', 'utf-8');
var configTpl = eval('(' + configTplStr + ')');

if (!optimize) {
    configTpl.optimize = 'none';
}
if (plain) {
    if (exclude.indexOf('map') >= 0) {
        configTpl.wrap = {
            startFile : ['wrap/start.js', "wrap/almond.js"],
            endFile : 'wrap/end.js'
        }
    } else {
        configTpl.wrap = {
            startFile : ['wrap/start.js', "wrap/almond.js"],
            endFile : 'wrap/end-map.js'
        }
    }
}

configTpl.out = outputFile;

if (exclude) {
    exclude.forEach(function(chartName) {
        if (chartName === 'map') {
            configTpl.include = configTpl.include.filter(function(path) {
                return path.indexOf('map') < 0;
            });
        } else {
            configTpl.include = configTpl.include.filter(function(path) {
                return path !== 'echarts/chart/' + chartName;
            });
        }
    });
    var chartsRequire = ['define(function(require) {'];
    configTpl.include.forEach(function(chartPath) {
        chartsRequire.push('    require("' + chartPath + '");');
    });
    chartsRequire.push('});')
    fs.writeFileSync('../src/_chart.js', chartsRequire.join('\n'), 'utf-8');

    configTpl.include.push('_chart');
}
fs.writeFileSync('_config_tmp.js', JSON.stringify(configTpl), 'utf-8');

var buildProcess = spawn('node', ['r.js', '-o', '_config_tmp.js']);
buildProcess.on('close', function() {
    fs.unlink('_config_tmp.js');
    fs.unlink('../src/_chart.js');
});
buildProcess.stdout.setEncoding('utf-8');
buildProcess.stdout.on('data', function(data) {
    console.log(data);
});
buildProcess.stderr.setEncoding('utf-8');
buildProcess.stderr.on('data', function(data) {
    throw new Error(data);
});
