class RequisicoesDeRelatoriosController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_requisicao_de_relatorio, only: [:download_pdf, :cancelar]

	# GET /requisicoes_de_relatorios
	def index
		RequisicaoDeRelatorio.where("created_at < ?", 2.hours.ago).delete_all
		if current_usuario.desenvolvedor?
			@q = RequisicaoDeRelatorio.order("id desc").search(params[:q])
			@requisicoes_de_relatorios = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		else
			@q = RequisicaoDeRelatorio.where(usuario_id: current_usuario.id).order("id desc").search(params[:q])
			@requisicoes_de_relatorios = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end
	end

	def cancelar
		@requisicao_de_relatorio.status = RequisicaoDeRelatorio.status[:cancelado]
		@requisicao_de_relatorio.save

		RequisicaoDeRelatorio.where(usuario_id: current_usuario.id, status: :pendente).order(:id).first.executar_relatorio_em_segundo_plano rescue nil
		sleep(8)

		redirect_to requisicoes_de_relatorios_path, notice: 'Processamento cancelado com sucesso.'
	end

	def download_pdf
		report_request = RequisicaoDeRelatorio.find(params[:id])
		send_data report_request.pdf, filename: "relatorio_#{report_request.id}_#{report_request.titulo.to_s.downcase}.pdf", type: "application/pdf", disposition: "inline"
	end

	private
	def set_requisicao_de_relatorio
		@requisicao_de_relatorio = RequisicaoDeRelatorio.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def requisicao_de_relatorio_params
		params.require(:requisicao_de_relatorio).permit(:usuario_id, :url, :status, :pdf)
	end
end
