class Controladoria::ResponsavelDoCentroDeCusto < ApplicationRecord
	has_paper_trail

	include TradutorConcern

	belongs_to :centro_de_custo, class_name: "Controladoria::CentroDeCusto"
	belongs_to :agente_publico_municipal, class_name: "Base::AgentePublicoMunicipal"

	delegate :matricula_municipal, to: :agente_publico_municipal, allow_nil: true

	validates_presence_of :centro_de_custo_id, :agente_publico_municipal_id, :data_inicial

	validate :valida_responsavel
	validate :valida_data_final
	validate :data_inicial_em_ano_possivel, if: Proc.new{ self.data_inicial.present? }
	validate :data_final_em_ano_possivel, if: Proc.new{ self.data_final.present? }

	def cpf_e_nome
		agente_publico_municipal.try(:cpf_e_nome)
	end

	def nome_e_cpf
		agente_publico_municipal.try(:nome_e_cpf)
	end

	def valida_data_final
		if self.data_final.present? && self.data_inicial.present?
			errors.add(:data_final, "não pode ser anterior ou igual a Data de Entrada.") if self.data_final <= self.data_inicial
		end
	end

	def data_inicial_em_ano_possivel
		if self.data_inicial.year < 1990
			errors.add(:data_inicial, "Precisa ser a partir do ano 1990")
		end
	end

	def data_final_em_ano_possivel
		if self.data_final.year < 1990
			errors.add(:data_final, "Precisa ser a partir do ano 1990")
		end
	end

	def valida_responsavel
		responsavel_existente = self.try(:centro_de_custo).try(:existe_responsavel_periodo?, self.data_inicial, self.data_final)

		if responsavel_existente.present?
			errors.add(:agente_publico_municipal_id, "já existe responsável no período informado.")
		end
	end
end
