/// <reference path="reserva.js" />
(function () {
    "use strict";

    angular.module('pos').controller('vendaController', controller);
    controller.$inject = ['$scope', '$window', '$state', '$stateParams', '$timeout', 'ticketService', 'pedidoService', 'operacaoVendaService', 'vendedorService'];

    function controller($scope, $window, $state, $stateParams, $timeout, ticketService, pedidoService, operacaoVendaService, vendedorService) {
        $scope.$parent.initializeLayout('Vendas');
        
        //[Inicializa objetos]
        $scope.tickets = {
            data: [],
            carregando: true,
            vazio: false,
            count: 0,
            filtro: {
                ativo: false,
                chaves: '',
                cpf: '',
                status: '',
                emissao: {
                    de: '',
                    ate: ''
                },
                total: {
                    de: '',
                    ate: ''
                },
                sortexpression: '',
                skip: 0,
                take: 20
            }
        };
        $scope.pedidos = {
            data: [],
            carregando: true,
            vazio: false,
            count: 0,
            filtro: {
                ativo: false,
                chaves: '',
                cpf: '',
                status: '',
                emissao: {
                    de: '',
                    ate: ''
                },
                total: {
                    de: '',
                    ate: ''
                },
                sortexpression: '',
                skip: 0,
                take: 20
            }
        };
        $scope.omni = {
            data: [],
            carregando: true,
            vazio: false,
            count: 0,
            filtro: {
                ativo: false,
                chaves: '',
                cpf: '',
                status: '',
                emissao: {
                    de: '',
                    ate: ''
                },
                total: {
                    de: '',
                    ate: ''
                },
                sortexpression: '',
                skip: 0,
                take: 20,
                pedidoOMNI: true
            }
        };
        $scope.tabs = { ticket: 0, pedido: 1, omni: 2 };
        $scope.currentTab = 0;

        function getDateWithoutTime(date) {
            if (date instanceof Date) {
                var dateObj = new Date(date);
                var dateWithoutTime = dateObj.toLocaleDateString();

                return dateWithoutTime;
            }
            else if (typeof date == "string") {
                var arrData = date.split('/');
                var dateObj = new Date(arrData[2], arrData[1] - 1, arrData[0]);
                var dateWithoutTime = dateObj.toLocaleDateString();

                if (dateWithoutTime == 'Invalid Date')
                    return date.toString();

                return dateWithoutTime;
            }
            else {
                return date;
            }
        }

        //[Inicializa funções]
        $scope.initialize = function () {
          
            if ($scope.$parent.config.VisualizaVendasDia) {
                $scope.tickets.filtro.emissao.de = new Date();
                $scope.pedidos.filtro.emissao.de = new Date();
            }
            if ($scope.$parent.config.GerenteVendaTerminal && $scope.$parent.environment.perfil.IndicaGerente || ($scope.$parent.config.TerminalVenda && !$scope.$parent.environment.perfil.IndicaGerente))
                $scope.setTerminal();

            if (!$scope.$parent.config.UsaPOS) {
                $scope.setCurrentTab($scope.tabs.pedido);
            }
            else
                $scope.setCurrentTab($scope.tabs.ticket);
            
        };
        $scope.historyBack = function () {
            $window.history.back();
        };

        $scope.setTerminal = function () {
            $scope.tickets.filtro.codigoTerminal = $scope.$parent.config.Terminal.Codigo;
            $scope.pedidos.filtro.codigoTerminal = $scope.$parent.config.Terminal.Codigo;
        };

        $scope.getTickets = function () {
            $scope.tickets.filtro.skip = 0;
            $scope.tickets.carregando = true;
            $scope.tickets.vazio = false;
            ticketService.getAll($scope.tickets.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.tickets.data);

                        $scope.tickets.carregando = false;
                        $scope.tickets.vazio = ($scope.tickets.data.length == 0);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.getPedidos = function () {
            $scope.pedidos.filtro.skip = 0;
            $scope.pedidos.carregando = true;
            $scope.pedidos.vazio = false;

            pedidoService.getAll($scope.pedidos.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.pedidos.data);

                        $scope.pedidos.carregando = false;
                        $scope.pedidos.vazio = ($scope.pedidos.data.length == 0);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.getMoreTickets = function () {
            $scope.tickets.filtro.skip += $scope.tickets.filtro.take;
            ticketService.getAll($scope.tickets.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.tickets.data = $scope.tickets.data.concat(response.Data);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.getMorePedidos = function () {
            $scope.pedidos.filtro.skip += $scope.pedidos.filtro.take;
            pedidoService.getAll($scope.pedidos.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.pedidos.data = $scope.pedidos.data.concat(response.Data);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.countTickets = function () {
            ticketService.count($scope.tickets.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.tickets.count = response.Data;
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.countPedidos = function () {
            pedidoService.count($scope.pedidos.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.pedidos.count = response.Data;
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.getPedidosOmni = function () {
            $scope.omni.filtro.skip = 0;
            $scope.omni.carregando = true;
            $scope.omni.vazio = false;

            pedidoService.getAll($scope.omni.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.omni.data);

                        $scope.omni.carregando = false;
                        $scope.omni.vazio = ($scope.omni.data.length == 0);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };

        $scope.countPedidosOmni = function () {
            pedidoService.count($scope.omni.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.omni.count = response.Data;
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }
        $scope.getMorePedidosOmni = function () {
            $scope.omni.filtro.skip += $scope.omni.filtro.take;
            pedidoService.getAll($scope.omni.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.omni.data = $scope.omni.data.concat(response.Data);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };


        $scope.setCurrentTab = function (tabindex) {
            $scope.currentTab = tabindex;

            if (tabindex == $scope.tabs.ticket) {

                if ($scope.tickets.filtro.emissao.de) {
                    var emissaoDe = $scope.tickets.filtro.emissao.de;
                    var emissaoDeNoTime = getDateWithoutTime(emissaoDe);
                    $scope.tickets.filtro.emissao.de = emissaoDeNoTime;
                }
                if ($scope.tickets.filtro.emissao.ate) {
                    var emissaoAte = $scope.tickets.filtro.emissao.ate;
                    var emissaoAteNoTime = getDateWithoutTime(emissaoAte);
                    $scope.tickets.filtro.emissao.ate = emissaoAteNoTime;
                }

                $scope.getTickets();
                $scope.countTickets();
            }
            else if (tabindex == $scope.tabs.pedido) {

                if ($scope.pedidos.filtro.emissao.de) {
                    var emissaoDe = $scope.pedidos.filtro.emissao.de;
                    var emissaoDeNoTime = getDateWithoutTime(emissaoDe);
                    $scope.pedidos.filtro.emissao.de = emissaoDeNoTime;
                }
                if ($scope.pedidos.filtro.emissao.ate) {
                    var emissaoAte = $scope.pedidos.filtro.emissao.ate;
                    var emissaoAteNoTime = getDateWithoutTime(emissaoAte);
                    $scope.pedidos.filtro.emissao.ate = emissaoAteNoTime;
                }

                $scope.getPedidos();
                $scope.countPedidos();
            } else
            if (tabindex == $scope.tabs.omni) {

                if ($scope.pedidos.filtro.emissao.de) {
                    var emissaoDe = $scope.pedidos.filtro.emissao.de;
                    var emissaoDeNoTime = getDateWithoutTime(emissaoDe);
                    $scope.pedidos.filtro.emissao.de = emissaoDeNoTime;
                }
                if ($scope.pedidos.filtro.emissao.ate) {
                    var emissaoAte = $scope.pedidos.filtro.emissao.ate;
                    var emissaoAteNoTime = getDateWithoutTime(emissaoAte);
                    $scope.pedidos.filtro.emissao.ate = emissaoAteNoTime;
                }

                $scope.getPedidosOmni();
                $scope.countPedidosOmni();
            }
        };
        $scope.refresh = function () {
            $scope.setCurrentTab($scope.currentTab);
        }
        $scope.clearFilter = function () {
            if ($scope.currentTab == $scope.tabs.ticket) {
                $scope.tickets.filtro.chaves = '';
                $scope.tickets.filtro.cpf = '';
                $scope.tickets.filtro.status = '';
                $scope.tickets.filtro.emissao.de = '';
                $scope.tickets.filtro.emissao.ate = '';
                $scope.tickets.filtro.total.de = '';
                $scope.tickets.filtro.total.ate = '';
            }
            else if ($scope.currentTab == $scope.tabs.pedido) {
                $scope.pedidos.filtro.chaves = '';
                $scope.pedidos.filtro.cpf = '';
                $scope.pedidos.filtro.status = '';
                $scope.pedidos.filtro.emissao.de = '';
                $scope.pedidos.filtro.emissao.ate = '';
                $scope.pedidos.filtro.total.de = '';
                $scope.pedidos.filtro.total.ate = '';
            }

            else if ($scope.currentTab == $scope.tabs.omni) {
                $scope.omni.filtro.chaves = '';
                $scope.omni.filtro.cpf = '';
                $scope.omni.filtro.status = '';
                $scope.omni.filtro.emissao.de = '';
                $scope.omni.filtro.emissao.ate = '';
                $scope.omni.filtro.total.de = '';
                $scope.omni.filtro.total.ate = '';
            }
            $scope.refresh();
        }
        $scope.showFilter = function () {
            if ($scope.currentTab == $scope.tabs.ticket) {
                $scope.tickets.filtro.ativo = true;
                $timeout(function () { $('[ng-model$="tickets.filtro.chaves"]').focus() });
            }
            else if ($scope.currentTab == $scope.tabs.pedido) {
                $scope.pedidos.filtro.ativo = true;
                $timeout(function () { $('[ng-model$="pedidos.filtro.chaves"]').focus() });
            }
        }
        $scope.hideFilter = function () {
            if ($scope.currentTab == $scope.tabs.ticket) {
                $scope.tickets.filtro.ativo = false;
            }
            else if ($scope.currentTab == $scope.tabs.pedido) {
                $scope.pedidos.filtro.ativo = false;
            }
        }
        //[Utiliza funções]
        $scope.initialize();
    };

})();