var fs = require('fs'), path = require('path');
var uaList = fs.readFileSync(path.join(__dirname, 'ua.txt'));


uaList = uaList.toString().split('\n');


var OSs = {};
var browsers = {};
var browserVersions = {};
var unknown = [];

var osMatch = {
	ios: /iOS|iPhone OS/i,
	android: /Android/i,
	linux: /Linux/i,
	win: /Windows/i,
	osx: /Mac|OS X/i,
	blackberry: /BlackBerry|BB10/i,
	series60: /Series 60|Series60/i,
	series40: /Series 40|Series40/i,
	j2me: /J2ME|MIDP/i
};

var browserMatch = {
	opera: /opera/i,
	ie: /msie|trident\//i,
	chrome: /chrome/i,
	chromium: /chromium/i,
	safari: /safari|AppleWebKit/i,
	firefox: /firefox/i,
	blackberry: /BlackBerry/i
};

var featureMatch = {
	ipad: /ipad/i,
	opera_mobile: /opera mini|opera mobi/i,
  opera_mini: /opera mini/i,
  blackberry: /blackberry/i
};

uaList.forEach(function (uaName) {
	var os = 'unknown';
	for (var curOs in osMatch) {
		if (uaName.match(osMatch[curOs])) {
			os = curOs;
			break;
		}
	}

	var browser = 'unknown';
	for (var curBrowser in browserMatch) {
		if (uaName.match(browserMatch[curBrowser])) {
			browser = curBrowser;
			break;
		}
	}

	var version = (
		uaName.match(/MSIE ([\d.]+)/) ||
		uaName.match( /.+(?:me|ox|on|rv|it|era|opr|ie)[\/: ]([\d.]+)/) ||
		[0,'0']
	)[1];

	if (!OSs[os]) {
		OSs[os] = 1;
	} else {
		OSs[os]++;
	}

	if (!browsers[os + ' ' + browser]) {
		browsers[os + ' ' + browser] = 1;
	} else {
		browsers[os + ' ' + browser]++;
	}

	if (os == 'unknown' || browser == 'unknown') {
		unknown.push(uaName);
	}

	if (!browserVersions[os + ' ' + browser + ' ' + version]) {
		browserVersions[os + ' ' + browser + ' ' + version] = 1;
	} else {
		browserVersions[os + ' ' + browser + ' ' + version]++;
	}

})


console.log(OSs);
console.log(browsers);
console.log(browserVersions);
// console.log(unknown);