class Contabilidade::MembroDoConselhoDoRpps < ApplicationRecord
	has_paper_trail
	include TradutorConcern

	belongs_to :conselho_de_rpps, class_name: 'Contabilidade::ConselhoDeRpps', required: true
	belongs_to :pessoa, class_name: 'Base::Pessoa', required: true
	belongs_to :arquivo, class_name: 'Tcm::Arquivo', required: false

	delegate :cpf, :nome, :endereco_completo, :telefone,:email, to: :pessoa, allow_nil: true

	validates_uniqueness_of :pessoa_id, scope: [:conselho_de_rpps_id]

	validates_presence_of :representatividade_do_conselho, :conselho_de_rpps_id, :pessoa_id, :data_de_admissao

	enum representatividade_do_conselho: {
		poder_executivo: 1,
		poder_legislativo: 2,
		servidores_ativos: 3,
		servidores_inativos: 4,
		outros: 9
	}

	def extinto?
		data_de_saida.present?
	end

	def enviado_ao_sim?
		arquivo_id.present? && arquivo_id > 0 && arquivo.lote.lote_processado_ou_enviado?
	end

	def to_sim
		# Variáveis necessárias para gerar o SIM
		begin
			unidade_orcamentaria = conselho_de_rpps.orcamento.unidades_orcamentarias.joins(:tipo_de_unidade_administrativa).find_by('base_tipos_de_unidades_administrativas.codigo = ?', "07")

			texto = ""
			texto << "969".sim_preenche(3) + "," #1
			texto << Configuracao.first.codigo_do_municipio_no_tcm.sim_preenche(3) + "," #2
			texto << (unidade_orcamentaria.present? ? unidade_orcamentaria.unidade_gestora.gestores.atual.cpf.sim_limite(11) : "''") + "," #3
			texto << conselho_de_rpps.decreto.data_da_legislacao.sim_data + "," #4
			texto << '"01"' + "," #5
			texto << cpf.sim_limite(11) + "," #6
			texto << self.read_attribute_before_type_cast(:representatividade_do_conselho).to_s.sim_limite(1) + "," #7
			texto << nome.sim_limite(60) + "," #8
			texto << endereco_completo.sim_limite(255) + "," #9
			texto << email.to_s.sim_limite(100)  + "," #10
			texto << telefone.sim_limite(11) + "," #11
			texto << data_de_admissao.sim_data + "," #12
			texto << (data_de_saida.present? ? data_de_saida.sim_data : "0") + "," #13
			#14 atribuido no lote.rb
	
			return texto
		rescue => e
			if e.class.to_s == "NoMethodError"
				atributo_falho = e.message.split(" ")[2]
				coluna = CSV.parse(texto, :headers => false).last.count
				raise e.mensagem_traduzida(self, self.liquidacao.try(:numero).to_s, atributo_falho, coluna)
			else
				raise e
			end
		end
	end
end
