class Contabilidade::MembroDoComiteDeInvestimento < ApplicationRecord
	has_paper_trail
	belongs_to :comite_de_investimento, class_name: 'Contabilidade::ComiteDeInvestimento', required: true
	belongs_to :pessoa, class_name: 'Base::Pessoa', required: true
	belongs_to :decreto, class_name: 'Contabilidade::Decreto'
	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: [:comite_de_investimento_id]

	validates_presence_of :data_de_admissao, :comite_de_investimento_id, :pessoa_id, :decreto_id

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

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

			texto = ""
			texto << "966".sim_preenche(3) + ","
			texto << Configuracao.first.codigo_do_municipio_no_tcm.sim_preenche(3) + ","
			texto << (unidade_orcamentaria.present? ? unidade_orcamentaria.unidade_gestora.gestores.atual.cpf.sim_limite(11) : "''") + ","
			texto << comite_de_investimento.data_da_criacao.sim_data + ","
			texto << comite_de_investimento.codigo_com_zeros.sim_limite(2) + ","
			texto << cpf.sim_limite(11) + ","
			texto << nome.sim_limite(60) + ","
			texto << endereco_completo.sim_limite(255) + ","
			texto << email.to_s.sim_limite(100)  + ","
			texto << telefone.sim_limite(11) + ","
			texto << data_de_admissao.sim_data + ","
			texto << (data_de_saida ? data_de_saida.sim_data  : "0" ) + ","
			texto << decreto.numero.to_s.sim_limite(10) + ","
			texto << decreto.data_da_publicacao.sim_data + ","
			texto << decreto.read_attribute_before_type_cast(:funcao_do_instrumento_legal).to_s + ","
			texto << data_de_referencia.to_s + ","

			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, "", atributo_falho, coluna)
			else
				raise e
			end
		end
	end

end
