/* Minification failed. Returning unminified contents.
(39,37-38): run-time error JS1195: Expected expression: >
(39,67-68): run-time error JS1004: Expected ';': )
(80,37-38): run-time error JS1195: Expected expression: >
(80,67-68): run-time error JS1004: Expected ';': )
(124,34-35): run-time error JS1195: Expected expression: >
(124,64-65): run-time error JS1004: Expected ';': )
(175,37-38): run-time error JS1195: Expected expression: >
(175,67-68): run-time error JS1004: Expected ';': )
(213,34-35): run-time error JS1195: Expected expression: >
(213,64-65): run-time error JS1004: Expected ';': )
(220,6-7): run-time error JS1195: Expected expression: )
(245,34-35): run-time error JS1195: Expected expression: >
(245,64-65): run-time error JS1004: Expected ';': )
(253,6-7): run-time error JS1195: Expected expression: )
(352,34-35): run-time error JS1195: Expected expression: >
(352,64-65): run-time error JS1004: Expected ';': )
(399,34-35): run-time error JS1195: Expected expression: >
(399,36-41): run-time error JS1197: Too many errors. The file might not be a JavaScript file: Array
(397,1-145): run-time error JS1301: End of file encountered before function is properly closed: function generateRoutesByCountryCountReport(data, chartContainerId, tableContainerId, progressElementId, hAxisTitle, vAxisTitle, translationMap)
(399,41-42): run-time error JS1195: Expected expression: .
(399,42-46): run-time error JS1197: Too many errors. The file might not be a JavaScript file: from
 */
function initGoogleDataTableSchema() {
    var chartDataTable = new google.visualization.DataTable();
    chartDataTable.addColumn("string", "Name"); //0
    chartDataTable.addColumn("string", "Name2");//1
    chartDataTable.addColumn("string", "Name3");//2
    chartDataTable.addColumn("string", "Description");//3
    chartDataTable.addColumn("number", "Value");//4
    chartDataTable.addColumn("datetime", "DateOfValue");//5
    chartDataTable.addColumn("datetime", "PreviousWeekDate");//6
    chartDataTable.addColumn("number", "ValuePreviousWeek");//7
    chartDataTable.addColumn("datetime", "PreviousMonthDate");//8
    chartDataTable.addColumn("number", "ValuePreviousMonth");//9
    chartDataTable.addColumn("datetime", "PreviousQuarterDate");//10
    chartDataTable.addColumn("number", "ValuePreviousQuarter");//11
    chartDataTable.addColumn("datetime", "PreviousYearDate");//12
    chartDataTable.addColumn("number", "ValuePreviousYear");//13
    chartDataTable.addColumn("number", "WeekOnWeekPercentChange");//14
    chartDataTable.addColumn("number", "MonthOnMonthPercentChange");//15
    chartDataTable.addColumn("number", "QuarterOnQuarterPercentChange");//16
    chartDataTable.addColumn("number", "YearOnYearPercentChange");//17


    chartDataTable.setColumnProperty(4, 'className', 'text-center');
    chartDataTable.setColumnProperty(7, 'className', 'text-center');
    chartDataTable.setColumnProperty(9, 'className', 'text-center');
    chartDataTable.setColumnProperty(11, 'className', 'text-center');
    chartDataTable.setColumnProperty(13, 'className', 'text-center');
    chartDataTable.setColumnProperty(14, 'className', 'text-center');
    chartDataTable.setColumnProperty(15, 'className', 'text-center');
    chartDataTable.setColumnProperty(16, 'className', 'text-center');
    chartDataTable.setColumnProperty(17, 'className', 'text-center');


    return chartDataTable;
}

function generateLongTermMonthlyPassengerCountReport(data, chartContainerId, progressElementId, title, translationMap,locale) {

    var mappedToArray = data.map(d => Array.from(Object.values(d)));

    var dataTable = new google.visualization.DataTable();

    dataTable.addColumn('date', translationMap.Period);
    dataTable.addColumn('number', translationMap.Total);

    dataTable.addRows(mappedToArray);

    var date_formatter = new google.visualization.DateFormat({
        pattern: "MMM, yyyy",
        locale: locale
    });

    date_formatter.format(dataTable, 0);

    var chartOptions = {
        colors: ['#21d0d9'],
        title: title,
        bars: 'vertical',
        theme: 'material',
        hAxis: {
            format: 'MMM, yyyy',
        },
        legend: { position: 'none' }
    };

    var view = new google.visualization.DataView(dataTable);
    var currentDate = dataTable.getColumnRange(0).max;
    var startDate = dataTable.getColumnRange(0).min;

    view.setRows(view.getFilteredRows([{ column: 0, minValue: new Date(startDate.valueOf()) }]));

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });

    chart.draw(view, google.charts.Bar.convertOptions(chartOptions));
}

function generateMonthlyPassengerCountReport(data, chartContainerId, progressElementId, title, translationMap,locale) {

    var mappedToArray = data.map(d => Array.from(Object.values(d)));

    var dataTable = new google.visualization.DataTable();

    dataTable.addColumn('date', translationMap.Period);
    dataTable.addColumn('number', translationMap.Total);

    dataTable.addRows(mappedToArray);

    var date_formatter = new google.visualization.DateFormat({
        pattern: "MMM, yyyy",
        locale:locale
    });

    date_formatter.format(dataTable, 0);

    var chartOptions = {
        colors: ['#fdd900'],
        title: title,
        bars: 'vertical',
        theme: 'material',
        hAxis: {
            format: 'MMM, yyyy',
            gridlines: { count: 12 },
            showTextEvery: 1,
            locale: locale
        },
        legend: { position: 'none' }
    };

    var view = new google.visualization.DataView(dataTable);
    var currentDate = dataTable.getColumnRange(0).max;
    var startDate = moment(currentDate).subtract(11, 'months');

    view.setRows(view.getFilteredRows([{ column: 0, minValue: new Date(startDate.valueOf()) }]));

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });

    chart.draw(view, google.charts.Bar.convertOptions(chartOptions));
}

function generateMonthlyPassengerComparisonReport(data, tableContainerId, progressElementId, translationMap,locale) {

    var chartArray = data.map(d => Array.from(Object.values(d)));
    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);

    var tableChartOptions = {
        pageSize: 20,
        page: 'enable',
        showRowNumber: true,
        cssClassNames: getTableCssStyles(),
        allowHtml: true
    };

    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var dateFormatter = new google.visualization.DateFormat({
        pattern: "MMM yyyy",
        locale:locale
    });

    var percentFormatter = new google.visualization.NumberFormat({
        suffix: '%', negativeColor: 'error', negativeParens: false
    });


    var arrowFormatter = new google.visualization.ArrowFormat();

    dateFormatter.format(dataTable, 5);
    dateFormatter.format(dataTable, 12);
    percentFormatter.format(dataTable, 17);
    arrowFormatter.format(dataTable, 17);

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([5, 4, 12, 13, 17]);

    dataTable.setColumnProperty(5, 'className', 'text-center');
    dataTable.setColumnProperty(12, 'className', 'text-center');

    dataTable.setColumnLabel(5, translationMap.Month);
    dataTable.setColumnLabel(4, translationMap.No_Passengers);
    dataTable.setColumnLabel(12, translationMap.Prev_Year);
    dataTable.setColumnLabel(13, translationMap.No_Passengers);
    dataTable.setColumnLabel(17, translationMap.Percentage_Change);

    google.visualization.events.addListener(tableChart, 'ready', function () { $("#" + progressElementId).hide(); });

    tableChart.draw(tableChartView, tableChartOptions);
}

function generateAnnualPassengerCountReport(data, chartContainerId, progressElementId, title, translationMap) {

    var mappedToArray = data.map(d => Array.from(Object.values(d)));

    var dataTable = new google.visualization.DataTable();

    dataTable.addColumn('date', translationMap.Period);
    dataTable.addColumn('number', translationMap.Total);

    dataTable.addRows(mappedToArray);

    var formatter = new google.visualization.DateFormat({ pattern: "yyyy" });

    var chartOptions = {
        colors: ['#4285f4'],
        title: title,
        bars: 'vertical',
        theme: 'material',
        legend: { position: 'none' },
        hAxis: {
            format: 'yyyy',
            gridlines: {
                count: 1
            },
            showTextEvery: 4
        }

    };

    var view = new google.visualization.DataView(dataTable);

    formatter.format(dataTable, 0);

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });
    chart.draw(view, google.charts.Bar.convertOptions(chartOptions));
}

function generateArrivalTimeStatusCountReport(data, chartContainerId, progressElementId, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));

    chartArray.forEach((row) => {

        if (row[0] in translationMap) {
            row[0] = translationMap[row[0]];
        }
    });

    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);

    var chartView = new google.visualization.DataView(dataTable);
    chartView.setColumns([0, 4]);

    var chartOptions = {
        colors: ['#4285f4', '#fdd900', '#39abd7', '#2285f4'],
        title: '',
        pieHole: 0.2,
        theme: 'material',
        legend: { position: 'labeled' }

    };

    var chart = new google.visualization.PieChart(document.getElementById(chartContainerId));
    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });
    chart.draw(chartView, google.charts.Bar.convertOptions(chartOptions));
}

function generateArrivalTimeStatusAirlinerCountReport(data, tableContainerId, progressElementId, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));


    chartArray.forEach((row) => {

        if (row[0] in translationMap) {
            row[0] = translationMap[row[0]];
        }
    });


    var dataTable = initGoogleDataTableSchema();

    dataTable.setColumnLabel(1, translationMap.Airline);

    dataTable.addRows(chartArray);

    var tableChartOptions = {
        pageSize: 20,
        page: 'enable',
        showRowNumber: true,
        cssClassNames: getTableCssStyles(),
        width: '100%'
    };

    // group data table
    var groupData = google.visualization.data.group(
        dataTable,
        [0, 1],
        [{
            column: 4,
            aggregation: google.visualization.data.sum,
            type: 'number'
        }]
    );

    // group data table
    var airlinerGroupData = google.visualization.data.group(
        dataTable,
        [1],
        [{
            column: 4,
            aggregation: google.visualization.data.sum,
            type: 'number'
        }]
    );



    // create data view
    var view = new google.visualization.DataView(groupData);

    // sum column array
    var aggColumns = [];

    // use first view column
    var viewColumns = [1];

    // build view & agg columns for each 
    groupData.getDistinctValues(0).forEach(function (item, index) {

        viewColumns.push({
            calc: function (dt, row) {
                if (dt.getValue(row, 0) === item) {
                    var rowidx = airlinerGroupData.getFilteredRows([{ column: 0, value: dt.getValue(row, 1) }])[0];
                    var rowTotal = airlinerGroupData.getValue(rowidx, 1);
                    return Math.round(dt.getValue(row, 2) / rowTotal * 100, 2);
                }
                return null;
            },
            label: item,
            type: 'number',
            properties: { 'className': 'text-center' }
        });

        // add sum column for each 
        aggColumns.push({
            aggregation: google.visualization.data.sum,
            column: index + 1,
            label: item.substring(3) + " %",
            type: 'number'
        });
    });

    // set view columns
    view.setColumns(viewColumns);



    // sum view
    var aggData = google.visualization.data.group(
        view,
        [0],
        aggColumns
    );


    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));
    google.visualization.events.addListener(tableChart, 'ready', function () { $("#" + progressElementId).hide(); });
    tableChart.draw(aggData, tableChartOptions);


}


function generateFlightsCountMonthByMonthReport(data, chartContainerId, progressElementId, title, translationMap,locale) {

    var chartArray = data.map(d => Array.from(Object.values(d)));


    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);


        var date_formatter = new google.visualization.DateFormat({
        pattern: "MMM, yyyy",
        locale: locale
    });

    date_formatter.format(dataTable, 0);

    var chartOptions = {
        colors: ['#39abd7'],
        title: title,
        theme: 'material',
        hAxis: {
            format: 'MM yyyy',
            locale:locale,
            slantedText: true,
            textStyle: {
                fontSize: 11
            }
        },
        legend: { position: 'none' }
    };

    dataTable.sort([{ column: 5 }]);

    var view = new google.visualization.DataView(dataTable);
    view.setColumns([{ sourceColumn: 0, label: translationMap.Month }, { sourceColumn: 4, label: translationMap.Flights }]);

    var currentDate = dataTable.getColumnRange(5).max;
    var startDate = moment(currentDate).subtract(11, 'months');

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });

    chart.draw(view, google.charts.Bar.convertOptions(chartOptions));

}

function generateRoutesByCountryCountReport(data, chartContainerId, tableContainerId, progressElementId, hAxisTitle, vAxisTitle, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));
    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);

    var chartOptions = {
        colors: ['#19abb7'],
        bars: 'horizontal',
        theme: 'material',
        legend: { position: 'none' },
        hAxis: {
            title: hAxisTitle
        },
        vAxis: {
            title: vAxisTitle
        }
    };

    var tableChartOptions = {
        pageSize: 10,
        page: 'enable',
        cssClassNames: getTableCssStyles()
    };

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var chartView = new google.visualization.DataView(dataTable);
    chartView.setColumns([0, 4]);

    var maxRowArray = [];
    var maxRows = 10;
    var numberOfRows = dataTable.getNumberOfRows() >= maxRows ? maxRows : dataTable.getNumberOfRows();

    for (var i = 0; i < numberOfRows; i++) {
        maxRowArray.push(i);
    }

    chartView.setRows(maxRowArray);

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([0, 4]);

    dataTable.setColumnLabel(0, translationMap.Country);
    dataTable.setColumnLabel(4, translationMap.Routes);

    chart.draw(chartView, google.charts.Bar.convertOptions(chartOptions));

    tableChart.draw(tableChartView, tableChartOptions);

    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });
}

function generateRoutesByTypeReport(data, chartContainerId, progressElementId, title, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));

    chartArray.forEach((row) => {

        if (row[2] in translationMap) {
            row[2] = translationMap[row[2]];
        }
    });

    var dataTable = google.visualization.arrayToDataTable(chartArray, true);

    var groupedData = google.visualization.data.group(
        dataTable,
        [2], // Group by column 2
        [{ 'column': 4, 'aggregation': google.visualization.data.sum, 'type': 'number' }] // Sum column 4
    );


    var chartView = new google.visualization.DataView(groupedData);

    var chartOptions = {
        colors: ['#4285f4', '#fdd900'],
        title: title,
        pieHole: 0.2,
        theme: 'material',
        legend: { position: 'labeled' }
    };

    var chart = new google.visualization.PieChart(document.getElementById(chartContainerId));
    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });
    chart.draw(chartView, google.charts.Bar.convertOptions(chartOptions));
}




function generateRoutesByDestinationsCountReport(data, chartContainerId, tableContainerId, progressElementId, hAxisTitle, vAxisTitle, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));
    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);

    var chartOptions = {
        colors: ['#d921d0'],
        chartArea: { height: "85%" },
        bars: 'horizontal',
        theme: 'material',
        legend: { position: 'none' },
        hAxis: {
            title: hAxisTitle
        },
        vAxis: {
            title: vAxisTitle
        }
    };

    var tableChartOptions = {
        pageSize: 10,
        page: 'enable',
        cssClassNames: getTableCssStyles()
    };

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var chartView = new google.visualization.DataView(dataTable);
    chartView.setColumns([1, 4]);

    var maxRowArray = [];
    var maxRows = 10;
    var numberOfRows = dataTable.getNumberOfRows() >= maxRows ? maxRows : dataTable.getNumberOfRows();

    for (var i = 0; i < numberOfRows; i++) {
        maxRowArray.push(i);
    }

    chartView.setRows(maxRowArray);

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([0, 1, 4]);

    dataTable.setColumnLabel(0, translationMap.Country);
    dataTable.setColumnLabel(1, translationMap.City);
    dataTable.setColumnLabel(4, translationMap.Routes);

    chart.draw(chartView, google.charts.Bar.convertOptions(chartOptions));

    tableChart.draw(tableChartView, tableChartOptions);

    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });

}

function generateRoutesByAirlinerCountReport(data, chartContainerId, tableContainerId, progressElementId, hAxisTitle, vAxisTitle, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));
    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);

    var chartOptions = {
        colors: ['#39d066'],
        chartArea: { height: "85%" },
        bars: 'horizontal',
        theme: 'material',
        legend: { position: 'none' },
        hAxis: {
            title: hAxisTitle
        }, vAxis: {
            title: vAxisTitle
        }
    };

    var tableChartOptions = {
        pageSize: 10,
        page: 'enable',
        cssClassNames: getTableCssStyles()
    };

    var chart = new google.charts.Bar(document.getElementById(chartContainerId));
    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var chartView = new google.visualization.DataView(dataTable);
    chartView.setColumns([0, 4]);

    var maxRowArray = [];

    var maxRows = 10;
    var numberOfRows = dataTable.getNumberOfRows() >= maxRows ? maxRows : dataTable.getNumberOfRows();

    for (var i = 0; i < numberOfRows; i++) {
        maxRowArray.push(i);
    }

    chartView.setRows(maxRowArray);

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([0, 4]);

    dataTable.setColumnLabel(0, translationMap.Airline);
    dataTable.setColumnLabel(4, translationMap.Routes);


    chart.draw(chartView, google.charts.Bar.convertOptions(chartOptions));

    tableChart.draw(tableChartView, tableChartOptions);

    google.visualization.events.addListener(chart, 'ready', function () { $("#" + progressElementId).hide(); });

}

function generateFlightsByCountryAirportsAndAirlinesCountReport(data, tableContainerId, progressElementId, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));

    chartArray.forEach((row) => {

        if (row[2] in translationMap) {
            row[2] = translationMap[row[2]];
        }
    });



    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);


    var tableChartOptions = {
        pageSize: 20,
        page: 'enable',
        showRowNumber: true,
        cssClassNames: getTableCssStyles(),
        width: '100%'
    };

    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([0, 2, 4, 1]);

    dataTable.setColumnLabel(0, translationMap.Airport);
    dataTable.setColumnLabel(2, translationMap.Type);
    dataTable.setColumnLabel(4, translationMap.Flights);
    dataTable.setColumnLabel(1, translationMap.Airlines);

    google.visualization.events.addListener(tableChart, 'ready', function () { $("#" + progressElementId).hide(); });

    tableChart.draw(tableChartView, tableChartOptions);

}

function generateFlightsByCountryInternationalAirportsAndAirlinesCountReport(data, tableContainerId, progressElementId, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));
    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);


    var tableChartOptions = {
        pageSize: 20,
        page: 'enable',
        showRowNumber: true,
        cssClassNames: getTableCssStyles(),
        width: '100%'
    };

    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([0, 4, 1]);

    dataTable.setColumnLabel(0, translationMap.Airport);
    dataTable.setColumnLabel(4, translationMap.Flights);
    dataTable.setColumnLabel(1, translationMap.Airlines);

    tableChartView.setRows(dataTable.getFilteredRows([{ column: 2, value: "International" }]));

    google.visualization.events.addListener(tableChart, 'ready', function () { $("#" + progressElementId).hide(); });

    tableChart.draw(tableChartView, tableChartOptions);

}

function generateFlightsByCountryDomesticAirportsAndAirlinesCountReport(data, tableContainerId, progressElementId, translationMap) {

    var chartArray = data.map(d => Array.from(Object.values(d)));
    var dataTable = initGoogleDataTableSchema();

    dataTable.addRows(chartArray);

    var tableChartOptions = {
        pageSize: 20,
        page: 'enable',
        showRowNumber: true,
        cssClassNames: getTableCssStyles(),
        width: '100%'
    };

    var tableChart = new google.visualization.Table(document.getElementById(tableContainerId));

    var tableChartView = new google.visualization.DataView(dataTable);
    tableChartView.setColumns([0, 4, 1]);
    dataTable.setColumnLabel(0, translationMap.Airport);
    dataTable.setColumnLabel(4, translationMap.Flights);
    dataTable.setColumnLabel(1, translationMap.Airlines);

    tableChartView.setRows(dataTable.getFilteredRows([{ column: 2, value: "Domestic" }]));

    google.visualization.events.addListener(tableChart, 'ready', function () { $("#" + progressElementId).hide(); });

    tableChart.draw(tableChartView, tableChartOptions);

}




function getTableCssStyles() {

    return {
        'headerRow': 'google-chart-table-header-row',
        'tableRow': 'google-chart-table-row',
        'oddTableRow': 'google-chart-table-alt-row',
        'selectedTableRow': 'google-chart-table-selected-row',
        'hoverTableRow': 'google-chart-table-row-hover',
        'headerCell': 'google-chart-table-header-cell',
        'tableCell': 'google-chart-table-cell',
        'rowNumberCell': 'black-text'
    };

};
