(function () {
    'use strict';

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

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

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

        function TipoReferencia(data, classificacao) {
            this.codigo = data.codigo;
            this.classificacao = classificacaoReferenciaEnum[classificacao.toUpperCase()];
            this.descricao = data.descricao;
            this.checked = data.checked;
            this.visivel = data.visivel;
            this.referencias = data.referencias.map(x => new Referencia(x));
        }

        TipoReferencia.prototype.manipularStatusReferencias = function () {
            this.referencias.forEach((referencia) => {
                if (referencia.visivel) {
                    referencia.checked = this.checked;
                }
            });
        };

        TipoReferencia.prototype.todasReferenciasSelecionadas = function () {
            return !this.referencias.some(referencia => referencia.visivel && !referencia.checked);
        };

        return TipoReferencia;
    }
})();
