(function () {
    "use strict";

    angular.module('pos').controller('produtoDetailController', controller);
    controller.$inject = ['$scope', '$state', '$stateParams', '$window', 'produtoService'];

    function controller($scope, $state, $stateParams, $window, produtoService) {
        $scope.$parent.initializeLayout('Produto');

        //[Inicializa objetos]
        $scope.state = {
            data: { Codigo: decodeURIComponent($stateParams.id) },
            carregando: false,
            vazio: false
        };
        $scope.vendasAno = {
            data: [],
            carregando: true,
            vazio: false,
            count: 0,
            filtro: { codigo: $stateParams.id }
        };

        //[Inicializa funcões]
        $scope.initialize = function () {
            $scope.refresh();
        };
        $scope.historyBack = function () {
            $window.history.back();
        }
        $scope.get = function () {
            $scope.state.carregando = true;
            $scope.state.vazio = false;
            produtoService
                .get($scope.state.data.Codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.state.data = response.Data;

                        $scope.state.carregando = false;
                        $scope.state.vazio = ($scope.state.data == 0);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.getDataChartVendasAno = function () {
            $scope.vendasAno.carregando = true;
            $scope.vendasAno.vazio = false;
            produtoService
                .getDataChartVendasAno($scope.vendasAno.filtro.codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.vendasAno.data);

                        $scope.vendasAno.carregando = false;
                        $scope.vendasAno.vazio = ($scope.vendasAno.data.length == 0);
                        $scope.$parent.tools.buildChart('#vendas-ano-chart', 'Quantidades', $scope.vendasAno.data);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.refresh = function () {
            $scope.get();
            $scope.getDataChartVendasAno();
        };

        $scope.getQuantidadeCorTamanho = function (size) {
            var total = 0;
            if (!size || size == "")
                return 0;

            if ($scope.state.data.Estoques == null)
                $scope.state.data.Estoques = [];

            for (var i = 0; i < $scope.state.data.Estoques.length; i++) {
                var item = $scope.state.data.Estoques[i];
                total += getQuantidadeTamanho(item.EstoqueTamanhos, size);
            }

            return total;
        }

        var getQuantidadeTamanho = function (array, size) {
            var total = 0;

            if (array == null)
                array = [];

            for (var i = 0; i < array.length; i++)
                if (array[i].Tamanho.Posicao == size)
                    total += array[i].Quantidade;

            return total;
        }


        $scope.getQuantidadeTotal = function () {
            var total = 0;
            if ($scope.state.data.Estoques == null)
                return total;

            for (var i = 0; i < $scope.state.data.Estoques.length; i++) {
                var item = $scope.state.data.Estoques[i];
                total += getQuantidadeTodosTamanho(item.EstoqueTamanhos);
            }
            return total;
        }
        var getQuantidadeTodosTamanho = function (array) {
            var total = 0;
            if (array == null)
                array = [];
            for (var i = 0; i < array.length; i++)
                total += array[i].Quantidade;
            return total;
        }

        /*Inicializa funções*/
        $scope.initialize();
    }

})();