(function () {
    'use strict';

    angular
        .module('contestacaoApp')
        .factory('ClassificacaoReferencias', ClassificacaoReferencias);

    ClassificacaoReferencias.$inject = ['classificacaoReferenciaEnum', 'TipoReferencia'];

    /* @ngInject */
    function ClassificacaoReferencias(classificacaoReferenciaEnum, TipoReferencia) {

        function ClassificacaoReferencias(data, propName) {
            let classificacao = classificacaoReferenciaEnum[propName.toUpperCase()];

            this.tipo = classificacao;
            this.descricao = classificacaoReferenciaEnum.properties[classificacao].name;
            this.checked = false;
            this.tipos = data.map(x => new TipoReferencia(x, propName));
        }

        ClassificacaoReferencias.prototype.manipularStatusTipos = function () {
            this.tipos.forEach((tipo) => {
                if (tipo.visivel) {
                    tipo.checked = this.checked;
                }
            });
        };

        ClassificacaoReferencias.prototype.todosTiposSelecionados = function () {
            if (!this.tipos || !this.tipos.length) {
                return false;
            }

            if (this.tipos.every(tipo => !tipo.visivel)) {
                return false;
            }

            return !this.tipos.some(tipo => tipo.visivel && !tipo.checked);
        };

        return ClassificacaoReferencias;
    }
})();
