'use strict';

var fs = require('fs');

var RELEASE_PATH = __dirname + '/../release/browser/node_datetime.js';
var SRC_PATH = __dirname + '/../src/';
var INDEX_PATH = __dirname + '/../index.js';
var TEMPLATE_PATH = __dirname + '/../src/browser_templates/main.tpl';
var DATETIME_TAG = 'var DateTime = require(\'./src/datetime\');';
var TIMEDNUMBER_TAG = 'var TimedNumber = require(\'./src/timednumber\');';
var TIMEDSTATE_TAG = 'var TimedState = require(\'./src/timedstate\');';
var TEMPLATE_TAG = '$(INDEX)';
var EXPORTS_TAG = 'module.exports = ';

// load index.js
var indexData = fs.readFileSync(INDEX_PATH, 'utf8');

// load datetime
var dateTimeData = fs.readFileSync(SRC_PATH + 'datetime.js', 'utf8');
// remove module.exports = DateTime;
dateTimeData = dateTimeData.replace(EXPORTS_TAG + 'DateTime;', '');

// load timednumber
var timedNumberData = fs.readFileSync(SRC_PATH + 'timednumber.js', 'utf8');
// remove module.exports = TimedNumber;
timedNumberData = timedNumberData.replace(EXPORTS_TAG + 'TimedNumber;', '');

// load datetime
var timedStateData = fs.readFileSync(SRC_PATH + 'timedstate.js', 'utf8');
// remove module.exports = TimedNumber;
timedStateData = timedStateData.replace(EXPORTS_TAG + 'TimedState;', '');

// add datetime, timednumber, and timedstate to indexDate
indexData = indexData.replace(DATETIME_TAG, dateTimeData);
indexData = indexData.replace(TIMEDNUMBER_TAG, timedNumberData);
indexData = indexData.replace(TIMEDSTATE_TAG, timedStateData);

// load template
var template = fs.readFileSync(TEMPLATE_PATH, 'utf8');

// add the code to the template
template = template.replace(TEMPLATE_TAG, indexData);

// remove all "use strict"
template = template.replace(/'use strict';\n/g, '');

// remove all comments with /* */
template = template.replace(/\/\*([\s\S]*?)\*\//g, '');

// remove all comments with //
template = template.replace(/\/\/(.*)$/gm, '');

// remove all line breaks and tabs
template = template.replace(/(\n|\t)/g, '');

// create the browser code
fs.writeFileSync(RELEASE_PATH, template, 'utf8');