class Contabilidade::DemonstrativoDeInformacaoPrevidenciaria < ApplicationRecord
	include TradutorConcern
	has_paper_trail

	belongs_to :orcamento

	attr_default :dado_patronal, true
	validates_presence_of :orcamento_id, :mes_de_competencia, :ano_de_competencia, :tipo_de_plano, :tipo_de_folha, :valor_base_de_calculo, :valor_das_contribuicoes, :valor_das_deducoes_direto, :valor_das_deducoes_indereto

	enum mes_de_competencia: {
		janeiro: 1,
		fevereiro: 2,
		marco: 3,
		abril: 4,
		maio: 5,
		junho: 6,
		julho: 7,
		agosto: 8,
		setembro: 9,
		outubro: 10,
		novembro: 11,
		dezembro: 12
	}

	enum tipo_de_plano:{
		previdenciario: 1,
		financeiro: 2
	}

	enum tipo_de_folha: {
		ativo: 1,
		inativo: 2,
		pensionista: 3
	}

	def competencia
		return "#{mes_de_competencia.try(:capitalize)} de #{ano_de_competencia.to_s}"
	end

	def dado_patronal_para_o_sim
		if dado_patronal?
			return 'S'
		else
			return 'N'
		end
	end

	def tipo_de_plano_para_o_sim
		if previdenciario?
			return 'P'
		elsif financeiro?
			return 'F'
		end
	end

	def tipo_de_folha_para_o_sim
		if ativo?
			return 'A'
		elsif inativo?
			return 'I'
		elsif pensionista?
			return 'P'
		end
	end

	def to_sim(data_de_referencia)
		# Variáveis necessárias para gerar o SIM
		begin
			exercicio_do_orcamento = orcamento.exercicio.to_s
			unidade_orcamentaria = orcamento.unidades_orcamentarias.joins(:tipo_de_unidade_administrativa).find_by('base_tipos_de_unidades_administrativas.codigo = ?', "07")
			texto = ""
			texto << "976".sim_preenche(3) + ","
			texto << Configuracao.first.codigo_do_municipio_no_tcm.sim_preenche(3) + ","
			texto << exercicio_do_orcamento.sim_limite_sem_aspas(4, "00") + ","
			texto << (unidade_orcamentaria.present? ? unidade_orcamentaria.orgao.codigo.sim_preenche(2) : "''") + ","
			texto << (unidade_orcamentaria.present? ? unidade_orcamentaria.codigo.codigo_uo_to_sim : "''") + ","
			texto << data_de_referencia.to_s + ","
			texto << dado_patronal_para_o_sim.sim_limite(2) + ","
			texto << tipo_de_plano_para_o_sim.sim_limite(2) + ","
			texto << tipo_de_folha_para_o_sim.sim_limite(2) + ","
			texto << valor_base_de_calculo.to_f.to_s.sim_valor  + ","
			texto << valor_das_contribuicoes.to_f.to_s.sim_valor  + ","
			texto << valor_das_deducoes_direto.to_f.to_s.sim_valor  + ","
			texto << valor_das_deducoes_indereto.to_f.to_s.sim_valor
			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
