module Patrimonio
class AvaliacoesDosBensController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_avaliacao_do_bem, only: [:show, :edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:new, :edit, :create]

	# GET /patrimonio/avaliacoes_dos_bens
	def index
		@q = AvaliacaoDoBem.order(:id).search(params[:q])
		@avaliacoes_dos_bens = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /patrimonio/avaliacoes_dos_bens/1
	def show
	end

	# GET /patrimonio/avaliacoes_dos_bens/new
	def new
		@avaliacao_do_bem = AvaliacaoDoBem.new
	end

	# GET /patrimonio/avaliacoes_dos_bens/1/edit
	def edit
	end

	# POST /patrimonio/avaliacoes_dos_bens
	def create
		@avaliacao_do_bem = AvaliacaoDoBem.new(avaliacao_do_bem_params)

		if @avaliacao_do_bem.save
			redirect_to @avaliacao_do_bem, notice: 'Avaliacao do bem foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /patrimonio/avaliacoes_dos_bens/1
	def update
		if @avaliacao_do_bem.update( avaliacao_do_bem_params )
			redirect_to @avaliacao_do_bem, notice: 'Avaliacao do bem foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /patrimonio/avaliacoes_dos_bens/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@avaliacao_do_bem)
		redirect_to patrimonio_bem_patrimonial_path(@avaliacao_do_bem.bem_patrimonial.id), mensagem
	end

	private
	def set_avaliacao_do_bem
		@avaliacao_do_bem = AvaliacaoDoBem.find( params[:id] )
	end

	def disponibiliza_dependencias
		@bem_patrimonial = Patrimonio::BemPatrimonial.find_by(id: params[:bem_patrimonial]) || Patrimonio::BemPatrimonial.find_by(id: avaliacao_do_bem_params[:bem_patrimonial_id])
		@comissoes = Patrimonio::Comissao.where(data_fim: nil).order('codigo ASC')

		if @bem_patrimonial.depreciacoes_dos_bens.present? || @bem_patrimonial.avaliacoes_dos_bens.where('tipo_de_avaliacao IN (3,4)').present?
			@tipos_de_avaliacao = Patrimonio::AvaliacaoDoBem.tipo_de_avaliacoes_i18n.except(:avaliacao, :avaliacao_aumentativa, :avaliacao_diminutiva).sort_by{|k,v| v}.to_h
		else
			@tipos_de_avaliacao = Patrimonio::AvaliacaoDoBem.tipo_de_avaliacoes_i18n.except(:avaliacao,:reavaliacao, :desvalorizacao).sort_by{|k,v| v}.to_h
		end
	end

	# Permite apenas os parâmetros específicos
	def avaliacao_do_bem_params
		params.require(:patrimonio_avaliacao_do_bem).permit(
			:bem_patrimonial_id, :comissao_id, :data_da_avaliacao, :tipo_de_avaliacao, :valor_diferenca, :observacao, :vida_util, :valor_final, :valor_inicial
		)
	end
end
end
