module Controladoria
	class VistosController < ApplicationController
		include ControllerConcern
		include Controladoria::VistosHelper

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!
		before_action :set_visto, only: [:edit, :update]
		before_action :set_vistoriavel, only: [:new, :create,:edit, :update]

		# GET /controladoria/vistos/new
		def new
			@visto = Controladoria::Visto.new
		end

		# GET /controladoria/vistos/1/edit
		def edit
		end

		# POST /controladoria/vistos
		def create
			@visto =  @vistoriavel.vistos.new(visto_params)
			@visto.vistoriador_id = current_usuario.id
			if @visto.save
				redirect_to rota_vistoriavel(@vistoriavel) + "?tab=vistos", notice: 'Visto foi criado com sucesso.'
			else
				render :new
			end
		end

		# PATCH/PUT /controladoria/vistos/1
		def update
			if @visto.update( visto_params_update )
				redirect_to rota_vistoriavel(@vistoriavel) + "?tab=vistos", notice: 'Visto foi atualizado com sucesso.'
			else
				render :edit
			end
		end

		private
		def set_visto
			@visto = Visto.find( params[:id] )
		end

		def set_vistoriavel
			@vistoriavel =
				if params[:empenho_id]
					contexto_atual.empenhos.find(params[:empenho_id])
				elsif params[:projeto_id]
					contexto_atual.projetos.find(params[:projeto_id])
				elsif params[:liquidacao_id]
					Contabilidade::Liquidacao.find(params[:liquidacao_id])
				elsif params[:anulacao_do_empenho_id]
					Contabilidade::AnulacaoDoEmpenho.find(params[:anulacao_do_empenho_id])
				elsif params[:pagamento_id]
					contexto_atual.pagamentos.find(params[:pagamento_id])
				elsif params[:contrato_id]
					contexto_atual.contratos.find(params[:contrato_id])
				elsif params[:aditivo_id]
					Licitacao::Aditivo.find(params[:aditivo_id])
				end
		end

		# Permite apenas os parâmetros específicos
		def visto_params
			params.require(:controladoria_visto).permit(:vistoriavel_id, :vistoriavel_type, :mensagem, :aprovado, :tipo, :data_do_parecer)
		end

		def visto_params_update
			params.require(:controladoria_visto).permit(:vistoriavel_id, :vistoriavel_type, :mensagem, :aprovado, :data_do_parecer)
		end
	end
end
