module Licitacao
class ArquivosBllDosProcessosController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_arquivo_bll_do_processo, only: [:show, :edit, :update, :destroy, :processar_arquivo, :desfazer_processamento_arquivo]

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

	# GET /licitacao/arquivos_bll_dos_processos/1
	def show
	end

	# GET /licitacao/arquivos_bll_dos_processos/new
	def new
		@arquivo_bll_do_processo = ArquivoBllDoProcesso.new(processo_id: params[:processo_id])
	end

	# GET /licitacao/arquivos_bll_dos_processos/1/edit
	def edit
	end

	# POST /licitacao/arquivos_bll_dos_processos
	def create
		@arquivo_bll_do_processo = ArquivoBllDoProcesso.new(arquivo_bll_do_processo_params)

		if @arquivo_bll_do_processo.save
			redirect_to licitacao_processo_path(@arquivo_bll_do_processo.processo), notice: 'Arquivo bll do processo foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /licitacao/arquivos_bll_dos_processos/1
	def update
		if @arquivo_bll_do_processo.update( arquivo_bll_do_processo_params )
			redirect_to licitacao_processo_path(@arquivo_bll_do_processo.processo), notice: 'Arquivo bll do processo foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

  def processar_arquivo
    @arquivo_bll_do_processo.transaction do
      begin
        @arquivo_bll_do_processo.processar_arquivo

        if @arquivo_bll_do_processo.save && @arquivo_bll_do_processo.processado == true
          redirect_to licitacao_processo_path(@arquivo_bll_do_processo.processo), notice: 'Arquivo BLL foi processado com sucesso.'
        end
      rescue Exception => e
        redirect_to licitacao_processo_path(@arquivo_bll_do_processo.processo)
        flash[:alert] = "Erro ao processar o Arquivo. #{e.message}"
        raise ActiveRecord::Rollback
      end
    end
  end

  def desfazer_processamento_arquivo
    @arquivo_bll_do_processo.transaction do
      begin
        @arquivo_bll_do_processo.desfaz_processamento_de_arquivo

        if @arquivo_bll_do_processo.save && @arquivo_bll_do_processo.processado == false
          redirect_to licitacao_processo_path(@arquivo_bll_do_processo.processo), notice: 'Arquivo BLL foi desfeito com sucesso.'
        end
      rescue Exception => e
        redirect_to licitacao_processo_path(@arquivo_bll_do_processo.processo)
        flash[:alert] = "Erro ao desfazer o processamento do Arquivo. #{e.message}"
        raise ActiveRecord::Rollback
      end
    end
  end

	# DELETE /licitacao/arquivos_bll_dos_processos/1
	def destroy
    processo = @arquivo_bll_do_processo.processo
		mensagem = apaga_e_retorna_mensagem(@arquivo_bll_do_processo)
		redirect_to licitacao_processo_path(processo), mensagem
	end

	private
	def set_arquivo_bll_do_processo
		@arquivo_bll_do_processo = ArquivoBllDoProcesso.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def arquivo_bll_do_processo_params
		params.require(:licitacao_arquivo_bll_do_processo).permit(:processo_id, :processado, :tipo_de_arquivo, :file)
	end
end
end
