﻿
var TvListings = TvListings || {};

/*
    Beautify <pre class="prettyprint">...</pre>
    http://code.google.com/p/google-code-prettify/
*/

prettyPrint();

/*
    Report graphs
*/

TvListings.CoverageDaysReport = function(containerId) {
    
    window.google.load("visualization", "1", {
        packages: ["corechart"],
        callback: function() {
            $.getJSON("/service/reports/coverage", function(report) {

                var daysTable = new window.google.visualization.DataTable();

                daysTable.addColumn('string', 'Brand');
                daysTable.addColumn('number', 'Days');
                daysTable.addRows(report.length);
               
                for (var i = 0; i < report.length; i++) {
                    daysTable.setValue(i, 0, report[i].BrandSlug);
                    daysTable.setValue(i, 1, report[i].CoverageDays);
                }
               
                var coverageDaysChart = new window.google.visualization.ColumnChart(document.getElementById(containerId));
                coverageDaysChart.draw(daysTable, {
                    width: 940,
                    height: 340,
                    axisTitlesPosition: 'in',
                    legend: 'none',
                    backgroundColor: {stroke: '#444', fill: '#fff', strokeWidth: 1},
                    chartArea: { left: 40, top: 40, width: "92%", height: "60%" },
                    hAxis: { slantedTextAngle: 45 },
                    vAxis: { }
                });
            });                    
        }
    });
};

TvListings.CoveragePctReport = function(containerId) {
    
    google.load("visualization", "1", { 
        packages: ["corechart"],
        callback: function() {
            $.getJSON("/service/reports/coverage", function(report) {

                var coverageTable = new google.visualization.DataTable();

                coverageTable.addColumn('string', 'Brand');
                coverageTable.addColumn('number', '%');
                coverageTable.addRows(report.length);
                
                for (var i = 0; i < report.length; i++) {
                    coverageTable.setValue(i, 0, report[i].BrandSlug);
                    coverageTable.setValue(i, 1, report[i].CoveragePct);
                }
                
                var coveragePctChart = new google.visualization.ColumnChart(document.getElementById(containerId));
                coveragePctChart.draw(coverageTable, {
                    width: 940,
                    height: 340,
                    axisTitlesPosition: 'in',
                    legend: 'none',
                    backgroundColor: {stroke: '#444', fill: '#fff', strokeWidth: 1},
                    chartArea: { left: 40, top: 40, width: "92%", height: "60%" },
                    hAxis: { slantedTextAngle: 45 },
                    vAxis: { }
                });
            });                   
        }
    });
};

TvListings.OriginReport = function(containerId) {
    
    google.load("visualization", "1", {
        packages: ["corechart"],
        callback: function() {
            $.getJSON("/service/reports/origin", function(report) {

                var table = new google.visualization.DataTable();

                table.addColumn('string', 'Origin');
                table.addColumn('number', 'Events');
                
                table.addRows(report.length);
                
                for (var i = 0; i < report.length; i++) {
                    table.setValue(i, 0, report[i].OriginSlug);
                    table.setValue(i, 1, report[i].CountEvents);
                }

                var chart = new google.visualization.PieChart(document.getElementById(containerId));
                chart.draw(table, {
                    width: 940,
                    height: 240,
                    chartArea: { left: 150, top: 40, width: "100%", height: "100%" },
                    title: 'Data Origin',
                    vAxis: { title: 'Origin', titleTextStyle: { color: 'red' } },
                    hAxis: { title: 'Scheduled events', titleTextStyle: { color: 'red' } }
                });
            });
        }        
    });
};

TvListings.StatsReport = function(containerId) {

	google.load("visualization", "1", {
		packages: ["table"],
		callback: function() {
			$.getJSON("/service/reports/stats", function(report) {

				var data = new google.visualization.DataTable();

				data.addColumn('string', 'Metric');
				data.addColumn('string', 'Value');

				data.addRows(5);

				data.setCell(0, 0, 'Total Brands');
				data.setCell(0, 1, report[0].TotalBrands.toString());

				data.setCell(1, 0, 'Total Events');
				data.setCell(1, 1, report[0].TotalEvents.toString());

				data.setCell(2, 0, 'Average Events Per Brand');
				data.setCell(2, 1, report[0].AverageEventsPerBrand.toString());

				data.setCell(3, 0, 'Earliest Event Created At');
				data.setCell(3, 1, displayDateFromJsonValue(report[0].EarliestEventCreatedAt));

				data.setCell(4, 0, 'Latest Event Created At');
				data.setCell(4, 1, displayDateFromJsonValue(report[0].LatestEventCreatedAt));

				var table = new google.visualization.Table(document.getElementById(containerId));
				table.draw(data, {});
			});
		}
	});
};

function displayDateFromJsonValue(jsonDateString) {
	var re = new RegExp("\/Date[(]([0-9]+)");

	var matches = jsonDateString.match(re);
	if (matches == null)
		return "";

	var millisecondsSinceEpoch = parseInt(matches[1]);

	var date = new Date();
	date.setTime(millisecondsSinceEpoch);

	function pad(n) { return n < 10 ? "0" + n : n; };

	return date.getFullYear() + "-"
		+ pad(date.getMonth() + 1) + "-"
		+ pad(date.getDate()) + " "
		+ pad(date.getHours()) + ":"
		+ pad(date.getMinutes()) + ":"
		+ pad(date.getSeconds());
}

