module Patrimonio
class DocumentosDoPatrimonioController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_documento_do_patrimonio, only: [:show, :edit, :update, :destroy, :excluir_documentos_dos_bens_do_recebimento]
	before_action :referencia_de_links_dependencias, except: :index

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

	# GET /patrimonio/documentos_do_patrimonio/1
	def show
	end

	# GET /patrimonio/documentos_do_patrimonio/new
	def new
		@documento_do_patrimonio = DocumentoDoPatrimonio.new
	end

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

	# POST /patrimonio/documentos_do_patrimonio
	def create
		@documento_do_patrimonio = DocumentoDoPatrimonio.new(documento_do_patrimonio_params)

		@documento_do_patrimonio.transaction do
			if @documento_do_patrimonio.save
				@documento_do_patrimonio.criar_copia_para_bem_patrimonial if @origem_type == 'Patrimonio::RecebimentoDeBem'
				redirect_to polymorphic_path(@documento_do_patrimonio.origem), notice: 'Documento do patrimonio foi criado(a) com sucesso.'
			else
				referencia_de_links_dependencias
				render :new
			end
		rescue Exception => e
			raise e
			raise ActiveRecord::Rollback
		end
		
	end

	# PATCH/PUT /patrimonio/documentos_do_patrimonio/1
	def update
		if @documento_do_patrimonio.update( documento_do_patrimonio_params )
			redirect_to @documento_do_patrimonio, notice: 'Documento do patrimonio foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /patrimonio/documentos_do_patrimonio/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@documento_do_patrimonio)
		redirect_to polymorphic_path(@documento_do_patrimonio.origem), mensagem
	end

	# DELETE ITEM DA REQUISICAO
	def excluir_documentos_dos_bens_do_recebimento
		@documento_do_patrimonio.origem.bens_patrimoniais.each do |bem|
			documento = DocumentoDoPatrimonio.find_by(origem_id: bem.id, origem_type: bem.class.name, documento_file_name: @documento_do_patrimonio.documento_file_name)
			apaga_e_retorna_mensagem(documento)
		end

		mensagem = apaga_e_retorna_mensagem(@documento_do_patrimonio)
		redirect_to polymorphic_path(@documento_do_patrimonio.origem), mensagem
	end

	private
	def set_documento_do_patrimonio
		@documento_do_patrimonio = DocumentoDoPatrimonio.find( params[:id] )
	end
	
	def referencia_de_links_dependencias
		if params[:origem_type].present? || params['patrimonio_documento_do_patrimonio'].present?
			@origem_type = params[:origem_type] || params['patrimonio_documento_do_patrimonio']['origem_type']
			@origem_id = params[:origem_id] || params['patrimonio_documento_do_patrimonio']['origem_id']
			if @origem_type == 'Patrimonio::RecebimentoDeBem'
				@origem = Patrimonio::RecebimentoDeBem.find(@origem_id.to_i) 
			elsif @origem_type == 'Patrimonio::RequisicaoPatrimonial'
				@origem = Patrimonio::RequisicaoPatrimonial.find(@origem_id.to_i)
			elsif @origem_type == 'Patrimonio::Transferencia'
				@origem = Patrimonio::Transferencia.find(@origem_id.to_i)
			elsif @origem_type == 'Patrimonio::CessaoDeBemPatrimonial'
				@origem = Patrimonio::CessaoDeBemPatrimonial.find(@origem_id.to_i)
			elsif @origem_type == 'Patrimonio::DevolucaoDeBemPatrimonial'
				@origem = Patrimonio::DevolucaoDeBemPatrimonial.find(@origem_id.to_i)
			else
				@origem = Patrimonio::BemPatrimonial.find(@origem_id.to_i)
			end
		end
	end

	# Permite apenas os parâmetros específicos
	def documento_do_patrimonio_params
		params.require(:patrimonio_documento_do_patrimonio).permit(:origem_id, :origem_type, :data_do_documento, :documento, :titulo_personalizado)
		
	end
end
end
