class Contabilidade::EngenheiroDaObra < ApplicationRecord
	include TradutorConcern
	include SimConcern

	has_paper_trail

	belongs_to :obra, required: true
	belongs_to :pessoa, required: true, class_name: 'Base::Pessoa'

	validates_presence_of :obra_id, :pessoa_id, :data_de_inicio, :numero_do_crea, :tipo, :formacao
	validates_presence_of :cargo, if: Proc.new{ self.preposto? }

	validates_length_of :numero_do_crea, maximum: 25

	validates :data_de_inicio, date: true

	validate :pessoa_nao_pode_ser_igual_ao_engenheiro_atual
	#validate :data_nao_pode_ser_anterior_ao_ultimo_engenheiro #Eduarda pediu pra retirar
	validate :data_nao_pode_ser_anterior_a_data_de_inicio_da_obra
	validate :data_de_inicio_deve_respeitar_periodo_do_envio_ao_sim, if: Proc.new { obra.enviado_ao_sim? }
	validate :pessoa_com_informacoes_pendente, on: :create

	after_create :atualiza_status_da_obra_associado

	enum tipo: {
		fiscal: 0,
		responsavel_na_empresa: 1,
		preposto: 2
	}

	enum formacao: {
		engenheiro: 0,
		arquiteto: 1
	}

	def atualiza_status_da_obra_associado
		eng = self.obra.engenheiro_responsavel

		if eng.present?
			status_da_obra_sem_engenheiro = self.obra.situacoes_da_obra.where(engenheiro_da_obra_id: nil).each do |status|
				status.update_column(:engenheiro_da_obra_id, eng.id)
			end
		end
	end

	# VALIDAÇÕES
	def pessoa_nao_pode_ser_igual_ao_engenheiro_atual
		if id.nil? && obra.present? && obra.engenheiro_responsavel.present?
			errors.add(:pessoa_id, "já é o responsável atual") if obra.engenheiro_responsavel.pessoa_id == self.pessoa_id
		end
	end

	def data_nao_pode_ser_anterior_ao_ultimo_engenheiro
		if obra.present? && obra.engenheiro_responsavel.present? && !data_de_inicio.nil?
			errors.add(:data_de_inicio, "deve ser após o inicio do ultimo responsável #{obra.engenheiro_responsavel.data_de_inicio}") if data_de_inicio <= obra.engenheiro_responsavel.data_de_inicio
		end
	end

	def data_nao_pode_ser_anterior_a_data_de_inicio_da_obra
		if obra.present? && !data_de_inicio.nil?
			errors.add(:data_de_inicio, "deve ser após o inicio da obra #{obra.data_de_inicio}") if data_de_inicio < obra.data_de_inicio
		end
	end

	def data_de_inicio_deve_respeitar_periodo_do_envio_ao_sim
		if obra.present? && data_de_inicio
			errors.add(:data_de_inicio, "O SIM do mês já foi enviado.") if lote_do_sim_gerado?(data_de_inicio)
		end
	end

	def pessoa_com_informacoes_pendente
		info_pendentes = []
		info_pendentes << "telefone" if pessoa.telefone.blank?
		info_pendentes << "e-mail" if pessoa.email.blank?
		info_pendentes = info_pendentes.join(", ")
		
		errors.add(:pessoa_id, "Responsável não possui #{info_pendentes} cadastrado") if info_pendentes.present?
	end
	# VALORES
	def descricao
		"#{pessoa.nome}"
	end

	def busca_agente_publico_municipal
		self.pessoa.agentes_publicos_municipais.last
	end

	# BOOLEANS
	def tem_agente_publico_municipal?
		self.pessoa.agentes_publicos_municipais.any?
	end
end
