class Perfil < ApplicationRecord
	has_paper_trail

	has_many :usuarios, class_name: 'Usuario', dependent: :restrict_with_exception
	has_many :permissoes, class_name: 'Acesso::Permissao', dependent: :destroy
	has_many :acoes, through: :permissoes, class_name: 'Acesso::Acao'

	accepts_nested_attributes_for :permissoes, reject_if: :all_blank, allow_destroy: true

	validates_uniqueness_of :nome
	validates_presence_of :nome

	def modulos
		self.permissoes.joins(:controle).where("acesso_controles.acesso_de_modulo is true and permitido is true")
	end

	def administrador?
		nome == "Administrador"
	end

	def secretario?
		nome == "Secretário"
	end

	def setor_de_compras?
		nome == "Setor de Compras"
	end

	def comissao?
		nome == "Comissão de Licitação"
	end

	class << self
		def administrador
			find_by( nome: 'Administrador' )
		end
	end

	def atualiza_permissoes(modulo_id, novas_permissoes)
		permissoes = self.permissoes.de_controle_ou_acao.where("modulo_id = ?", modulo_id)

		permissoes.all.each do |permissao|
			if novas_permissoes.include?(permissao.controle_id)
				permissao.update_column(:permitido, true)
			else
				permissao.update_column(:permitido, false)
			end
		end
	end

	def tem_permissao_de_controle?(controle_id)
		permissoes.where("controle_id = ? and permitido is true", controle_id).exists?
	end

	def tem_permissao?
		permissao = self.permissoes.joins(controle: :modulo).where("acesso_de_modulo is true and permitido is true")
		if permissao.present?
			return true
		end
	end

	def tem_permissao_de_modulo?(nome_do_modulo)
		nome_do_modulo = "loa" if nome_do_modulo == "planejamento"
		permissao = permissoes.joins(controle: :modulo).where("acesso_de_modulo is true and permitido is true and acesso_modulos.nome_do_modulo = ?", nome_do_modulo).first
		
		if permissao.present?
			configuracao = Configuracao.first
			if permissao.controle.nome_de_exibicao == 'Administração'
				return true
			elsif permissao.controle.nome_de_exibicao == 'Administrativo' && configuracao.usa_modulo_administrativo?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Auditoria'
				return true
			elsif permissao.controle.nome_de_exibicao == 'Configurações'
				return true
			elsif permissao.controle.nome_de_exibicao == 'Contabilidade' && configuracao.usa_modulo_contabil?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Controladoria' && configuracao.usa_modulo_controle?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Gestão de Estoque' && configuracao.usa_modulo_gestao_de_estoque?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Licitação' && configuracao.usa_modulo_licitacao?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Obra' && configuracao.usa_modulo_gestao_de_obras?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Orçamento' && configuracao.usa_modulo_planejamento?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Patrimônio' && configuracao.usa_modulo_gestao_de_estoque?
				return true
			elsif permissao.controle.nome_de_exibicao == 'Portal da Transparência'
				return true
			elsif permissao.controle.nome_de_exibicao == 'PPA' && configuracao.usa_modulo_planejamento?
				return true
			else
				return false
			end
		else
			return false
		end
	end
end
