(function () {
    "use strict";

    angular.module('pos').controller('dashboardController', controller);
    controller.$inject = ['$scope', '$window', 'dashboardService'];

    function controller($scope, $window, dashboardService) {
        $scope.$parent.initializeLayout('Dashboard');

        //[Inicializa objetos]
        $scope.atendimentosXCancelamentos = {
            data: [],
            carregando: false,
            vazio: false,
            count: 0,
            filtro: {}
        };
        $scope.atendimentosXVendedores = {
            data: [],
            carregando: false,
            vazio: false,
            count: 0,
            filtro: {}
        };
        $scope.atendimentosXCancelamentosPersonalizado = {
            data: [],
            carregando: false,
            vazio: false,
            count: 0,
            filtro: {}
        };
        $scope.atendimentosXVendedoresPersonalizado = {
            data: [],
            carregando: false,
            vazio: false,
            count: 0,
            filtro: {}
        };
        $scope.totais = {
            atendimentos: '---',
            abertos: '---',
            cancelados: '---',
            concluidos: '---',
            vendas: '---',
            VA: '---',
            PA: '---',
            troca: '---',
            precoMedio: '---'
        };
        $scope.data = { inicio: null, fim: null };
        $scope.state = {
            periodos: { hoje: 0, ontem: 1, sete_dias: 2, neste_mes: 3, neste_ano: 4, customizado: 5 },
            periodocustomizado: { hoje: false, mes: false, ano: false },
            filtro: {
                args: {
                    periodo: 3,
                    periodoPesquisado: 3,
                    vendasDe: null,
                    vendasAte: null,
                    personalizadoAte : '',
                    personalizadoDe: ''
                },
            },
            dashboard: {
                data: [],
                carregando: true,
                vazio: false,
                count: 0,
                filtro: {
                    ativo: false,
                    periodo: 3,
                    de: '',
                    ate: ''
                }
            }
        }
        window._scope = $scope;

        //[Inicializa funções]
        $scope.initialize = function () {
            
            $scope.setFiltro();
            $scope.getTotais();
            $scope.getDataChartAtendimentosXCancelamentos();
            $scope.getDataChartAtendimentosXVendedores();
        };

        var criarPeriodo = function () {
            switch ($scope.state.filtro.args.periodo) {
                case $scope.state.periodos.hoje:
                    $scope.state.filtro.Periodo = 1;
                    break;
                case $scope.state.periodos.ontem:
                    $scope.state.filtro.Periodo = 2;
                    break;
                case $scope.state.periodos.sete_dias:
                    $scope.state.filtros.Periodo = 3;
                    break;
                case $scope.state.periodos.neste_mes:
                    $scope.filtro.Periodo = 5;
                    break;
                case $scope.state.periodos.neste_ano:
                    $scope.filtro.Periodo = 6;
                    break;
                case $scope.state.periodos.customizado:
                    $scope.state.filtro.Periodo = 4;
                    $scope.state.filtro.Inicio = $scope.state.filtro.args.vendasDe;
                    $scope.state.filtro.Fim = $scope.state.filtro.args.vendasAte;
                    break;
            }
        }

        $scope.historyBack = function () {
            $window.history.back();
        };

        $scope.setFiltro = function () {
            if ($scope.$parent.config.TerminalVenda || ($scope.$parent.config.GerenteVendaTerminal && $scope.$parent.environment.perfil.IndicaGerente))
                $scope.filtro = { 'codigoTerminal': $scope.$parent.config.Terminal.Codigo };
            else
                $scope.filtro = { 'codigoTerminal': null };
        };

        $scope.getDataChartAtendimentosXCancelamentos = function () {
            $scope.atendimentosXCancelamentos.carregando = true;
            $scope.atendimentosXCancelamentos.vazio = false;
            dashboardService
                .getDataChartAtendimentosXCancelamentos30Dias($scope.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            console.error(response.Message);
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.atendimentosXCancelamentos.data);

                        //if (document.getElementById(" highcharts-background")) {
                        // Faz com que o grafico acompanhe o tamanho do container
                        //setTimeout(function () {
                        //    var chart = $('#atendimentos-x-cancelamentos-chart').highcharts();
                        //    chart.setSize($('#atendimentos-x-cancelamentos-chart').width(), 300);
                        //}, 500);

                        $scope.atendimentosXCancelamentos.carregando = false;
                        setTimeout(function () {
                            $scope.$parent.tools.buildChart('#atendimentos-x-cancelamentos-chart', 'Atendimentos', $scope.atendimentosXCancelamentos.data);
                            $scope.atendimentosXCancelamentos.vazio = ($scope.atendimentosXCancelamentos.data.length == 0);
                        }, 500)

                    },
                    function (err) {
                        console.error(err);
                        $scope.atendimentosXCancelamentos.carregando = false;
                        $scope.atendimentosXCancelamentos.vazio = ($scope.atendimentosXCancelamentos.data.length == 0);
                    }
                );
        };

        $scope.getDataChartAtendimentosXVendedores = function () {
            $scope.atendimentosXVendedores.carregando = true;
            $scope.atendimentosXVendedores.vazio = false;
            dashboardService
                .getDataChartAtendimentosXVendedores30Dias($scope.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            console.error(response.Message);
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.atendimentosXVendedores.data);

                        // Faz com que o grafico acompanhe o tamanho do container
                        //setTimeout(function () {
                        //    var chart = $('#atendimentos-x-vendedores-chart').highcharts();
                        //    chart.setSize($('#atendimentos-x-vendedores-chart').width(), 300);
                        //}, 500);

                        $scope.atendimentosXVendedores.carregando = false;
                        setTimeout(function () {

                            $scope.atendimentosXVendedores.vazio = ($scope.atendimentosXVendedores.data.length == 0);
                            $scope.$parent.tools.buildChart('#atendimentos-x-vendedores-chart', null, $scope.atendimentosXVendedores.data);
                        }, 500);
                    },
                    function (err) {
                        console.error(err);
                        $scope.atendimentosXVendedores.carregando = false;
                        $scope.atendimentosXVendedores.vazio = ($scope.atendimentosXVendedores.data.length == 0);
                    }
                );
        }

        $scope.getTotais = function () {
            dashboardService
                .getTotais30Dias($scope.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            console.error(response.Message);
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.totais);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
 
        // New

        $scope.getDataChartAtendimentosXCancelamentosPersonalizado = function () {
            
            $scope.atendimentosXCancelamentos.carregando = true;
            $scope.atendimentosXCancelamentos.vazio = false;
            dashboardService
                .getDataChartAtendimentosXCancelamentosPersonalizado($scope.state.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            console.error(response.Message);
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.atendimentosXCancelamentos.data);

                        //setTimeout(function () {
                        //    var chart = $('#atendimentos-x-cancelamentos-chart').highcharts();
                        //    chart.setSize($('#atendimentos-x-cancelamentos-chart').width(), 300);
                        //}, 500);

                        $scope.atendimentosXCancelamentos.carregando = false;
                        setTimeout(function () {
                            $scope.$parent.tools.buildChart('#atendimentos-x-cancelamentos-chart', 'Atendimentos', $scope.atendimentosXCancelamentos.data);
                            $scope.atendimentosXCancelamentos.vazio = ($scope.atendimentosXCancelamentos.data.length == 0);
                        }, 500);

                    },
                    function (err) {
                        console.error(err);
                        $scope.atendimentosXCancelamentos.carregando = false;
                        $scope.atendimentosXCancelamentos.vazio = ($scope.atendimentosXCancelamentos.data.length == 0);
                    }
                );
        };

        $scope.getDataChartAtendimentosXVendedoresPersonalizado = function () {
            $scope.atendimentosXVendedores.carregando = true;
            $scope.atendimentosXVendedores.vazio = false;
            dashboardService
                .getDataChartAtendimentosXVendedoresPersonalizado($scope.state.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            console.error(response.Message);
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.atendimentosXVendedores.data);

                        // Faz com que o grafico acompanhe o tamanho do container
                        //setTimeout(function () {
                        //    var chart = $('#atendimentos-x-cancelamentos-chart').highcharts();
                        //    chart.setSize($('#atendimentos-x-cancelamentos-chart').width(), 300);
                        //}, 500);
                        $scope.atendimentosXVendedores.carregando = false;
                        setTimeout(function () {
                            $scope.$parent.tools.buildChart('#atendimentos-x-vendedores-chart', null, $scope.atendimentosXVendedores.data);
                            $scope.atendimentosXVendedores.vazio = ($scope.atendimentosXVendedores.data.length == 0);
                        }, 500);


                    },
                    function (err) {
                        console.error(err);
                        $scope.atendimentosXVendedores.carregando = false;
                        $scope.atendimentosXVendedores.vazio = ($scope.atendimentosXVendedores.data.length == 0);
                    }
                );
        };

        $scope.getTotaisPersonalizado = function () {
            dashboardService
                .getTotaisPersonalizado($scope.state.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            console.error(response.Message);
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.totais);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };

        // New 


        $scope.refresh = function () {
            //if ($scope.state.filtro.args.periodo !== $scope.state.periodos.customizado) {
            //    $scope.getTotais();
            //} else {
            //    var dataDe = $scope.state.filtro.args.vendasDe;
            //    var vendasDeModel = angular.element(document.querySelector('#vendasDeModel'));
            //    var dataAte = $scope.state.filtro.args.vendasAte;
            //    var vendasAteModel = angular.element(document.querySelector('#vendasDeModel'));
            //    if (vendasDeModel.val() != '' && dataDe == null) {
            //        toastr.warning('Data inicial invalida.', 'Atenção');
            //        return;
            //    }
            //    if (vendasAteModel.val() != '' && dataAte == null) {
            //        toastr.warning('Data final invalida.', 'Atenção');
            //        return;
            //    }
            //    var data1 = validaData($scope.state.filtro.args.vendasDe);
            //    var data2 = validaData($scope.state.filtro.args.vendasAte);
            //    if (data1 > data2) {
            //        toastr.warning('Data inicial não pode ser maior que a data final.', 'Atenção');
            //        return;
            //    }
            //}
            if ($scope.state.filtro.args.periodo == $scope.state.periodos.hoje) {
                $scope.state.periodocustomizado.hoje = true;
                $scope.state.periodocustomizado.ontem = false;
                $scope.state.periodocustomizado.sete_dias = false;
                $scope.state.periodocustomizado.mes = false;
                $scope.state.periodocustomizado.ano = false;
                //$scope.data = { inicio: new Date(), fim: null };
                $scope.getDataChartAtendimentosXCancelamentosPersonalizado();
                $scope.getDataChartAtendimentosXVendedoresPersonalizado();
                $scope.getTotaisPersonalizado();
            } else if ($scope.state.filtro.args.periodo == $scope.state.periodos.ontem) {
                $scope.state.periodocustomizado.hoje = false;
                $scope.state.periodocustomizado.ontem = true;
                $scope.state.periodocustomizado.sete_dias = false;
                $scope.state.periodocustomizado.mes = false;
                $scope.state.periodocustomizado.ano = false;
                //$scope.data = { inicio: new Date(), fim: null };
                $scope.getDataChartAtendimentosXCancelamentosPersonalizado();
                $scope.getDataChartAtendimentosXVendedoresPersonalizado();
                $scope.getTotaisPersonalizado();
            } else if ($scope.state.filtro.args.periodo == $scope.state.periodos.sete_dias) {     
                $scope.state.periodocustomizado.hoje = false;
                $scope.state.periodocustomizado.ontem = false;
                $scope.state.periodocustomizado.sete_dias = true;
                $scope.state.periodocustomizado.mes = false;
                $scope.state.periodocustomizado.ano = false;
                //$scope.data = { inicio: addDate(new Date(), 0, -1, 0), fim: null };
                $scope.getDataChartAtendimentosXCancelamentosPersonalizado();
                $scope.getDataChartAtendimentosXVendedoresPersonalizado();
                $scope.getTotaisPersonalizado();
            } else if ($scope.state.filtro.args.periodo == $scope.state.periodos.neste_mes) {
                $scope.state.periodocustomizado.hoje = false;
                $scope.state.periodocustomizado.ontem = false;
                $scope.state.periodocustomizado.sete_dias = false;
                $scope.state.periodocustomizado.mes = true;
                $scope.state.periodocustomizado.ano = false;
                //$scope.data = { inicio: addDate(new Date(), 0, -1, 0), fim: null };
                $scope.getDataChartAtendimentosXCancelamentos();
                $scope.getDataChartAtendimentosXVendedores();
                $scope.getTotais();
            } else if ($scope.state.filtro.args.periodo == $scope.state.periodos.neste_ano) {
                $scope.state.periodocustomizado.hoje = false;
                $scope.state.periodocustomizado.ontem = false;
                $scope.state.periodocustomizado.sete_dias = false;
                $scope.state.periodocustomizado.mes = false;
                $scope.state.periodocustomizado.ano = true;
                //$scope.data = { inicio: addDate(new Date(), 0, 0, -1), fim: null };
                $scope.getDataChartAtendimentosXCancelamentosPersonalizado();
                $scope.getDataChartAtendimentosXVendedoresPersonalizado();
                $scope.getTotaisPersonalizado();
            } else if ($scope.state.filtro.args.periodo == $scope.state.periodos.customizado) {
                var dataDe = $scope.state.filtro.args.vendasDe;
                var vendasDeModel = angular.element(document.querySelector('#vendasDeModel'));
                var dataAte = $scope.state.filtro.args.vendasAte;
                var vendasAteModel = angular.element(document.querySelector('#vendasDeModel'));
                if (vendasDeModel.val() != '' && dataDe == null) {
                    toastr.warning('Data inicial invalida.', 'Atenção');
                    return;
                }
                if (vendasAteModel.val() != '' && dataAte == null) {
                    toastr.warning('Data final invalida.', 'Atenção');
                    return;
                }
                var data1 = validaData($scope.state.filtro.args.vendasDe);
                var data2 = validaData($scope.state.filtro.args.vendasAte);
                if (data1 > data2) {
                    toastr.warning('Data inicial não pode ser maior que a data final.', 'Atenção');
                    return;
                }
                $scope.data = { inicio: $scope.state.filtro.args.vendasDe, fim: $scope.state.filtro.args.vendasAte };
                $scope.getDataChartAtendimentosXCancelamentosPersonalizado();
                $scope.getDataChartAtendimentosXVendedoresPersonalizado();
                $scope.getTotaisPersonalizado();
            }
            
            $scope.state.filtro.args.periodoPesquisado = $scope.state.filtro.args.periodo;
            $scope.state.filtro.args.personalizadoDe = $scope.state.filtro.args.vendasDe;
            $scope.state.filtro.args.personalizadoAte = $scope.state.filtro.args.vendasAte;
        };
        var validaData = function (data) {
            if (Object.prototype.toString.call(data) === "[object Date]") {

                if (isNaN(data.getTime())) {
                    return new Date();
                }
                else {
                    return data;
                }
            }
            else {
                return new Date();
            }
        }
        $scope.clearFilter = function () {
            $scope.state.filtro.args.vendasDe = '';
            $scope.state.filtro.args.vendasAte = '';
        }
        $scope.showFilter = function () {
            
            $scope.state.dashboard.filtro.ativo = true;
            //$timeout(function () { $('[ng-value$="state.periodos.neste_mes"]').focus() });
        }
        $scope.hideFilter = function () {
            $scope.state.dashboard.filtro.ativo = false;
        }
        // New 

        //[Utiliza funções]
        $scope.initialize();
    }

})();
