class Obra::VerificacaoDaFiscalizacao < ApplicationRecord
	has_paper_trail
	include IncrementadorDeCodigoConcern
	include TradutorConcern

	belongs_to :fiscalizacao, required: true, class_name: 'Obra::Fiscalizacao'
	has_many :fotos_da_verificacao, class_name: 'Obra::FotoDaVerificacao', dependent: :destroy

	accepts_nested_attributes_for :fotos_da_verificacao, reject_if: :all_blank, allow_destroy: true
	validates_associated :fotos_da_verificacao

	validates_presence_of :data_do_cadastro, :tipo, :situacao, :descricao

	scope :pendentes, -> { where('obra_verificacoes_da_fiscalizacao.tipo in (?) and obra_verificacoes_da_fiscalizacao.situacao = ?',
					[Obra::VerificacaoDaFiscalizacao.tipos["orientacao"], Obra::VerificacaoDaFiscalizacao.tipos["questionamento"]], Obra::VerificacaoDaFiscalizacao.situacoes["em_atendimento"])}

	before_create :atualiza_codigo_sequencial
	after_destroy :reordenar_numero

	enum tipo: {
		geral: 1,
		orientacao: 2,
		questionamento: 3,
		solicitacao: 4
	}

	enum situacao: {
		atendido: 1,
		atendido_parcial: 2,
		em_atendimento: 3,
		nao_atendido: 4,
		nao_se_aplica: 5,
		outro: 6
	}

	private

	def atualiza_codigo_sequencial
		gerar_sugestao_codigo( :codigo, 4, { fiscalizacao_id: self.fiscalizacao_id }, true )
	end

	def reordenar_numero
		proximo_numero = 1
		if fiscalizacao.verificacoes_da_fiscalizacao.any?
			fiscalizacao.verificacoes_da_fiscalizacao.order(:codigo).each do |verificacao|
				verificacao.update_column(:codigo, proximo_numero)
				proximo_numero += 1
			end
		end
	end
end
