module Licitacao
class RecursosController < ApplicationController
	include ControllerConcern
	include LicitacaoControllersConcern
	include LicitacaoHelper

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_recurso, only: [:show, :edit, :update, :destroy]
	before_action :set_processo, only: [:create, :new]
	before_action :valida_se_processo_esta_em_curso
	before_action :carrega_situacoes, only: [:new, :edit]

	# GET /licitacao/recursos/1
	def show
	end

	# GET /licitacao/recursos/new
	def new
		@recurso = @processo.recursos.new
	end

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

	# POST /licitacao/recursos
	def create
		@recurso = @processo.recursos.new(recurso_params)
		if @recurso.save
			@processo.em_recurso!
			redirect_to licitacao_processo_path(@processo, tab: "recursos"), notice: 'Recurso foi criado com sucesso.'
		else
			carrega_situacoes
			render :new
		end
	end

	# PATCH/PUT /licitacao/recursos/1
	def update
		processo = @recurso.processo
		if @recurso.update( recurso_params )

			if processo.recursos.where(situacao: 0).count == 0
				processo.retomar_sessao!
			end

			redirect_to licitacao_processo_path(@recurso.processo, tab: "recursos"), notice: 'Recurso foi atualizado com sucesso.'
		else
			carrega_situacoes
			render :edit
		end
	end

	# DELETE /licitacao/recursos/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@recurso)
		redirect_to licitacao_processo_path(@recurso.processo, tab: "recursos"), mensagem
	end

	private
	def set_recurso
		@recurso = Licitacao::Recurso.find( params[:id] )
	end

	def set_processo
		@processo = Licitacao::Processo.find( params[:processo_id] )
	end

	def carrega_situacoes
		@situacoes = Licitacao::Recurso.situacoes.select{|s| s!="aguardando_julgamento"}.map {|key, _|
			[Licitacao::Recurso.localizar("situacao", key), key]
		}
	end

	def valida_se_processo_esta_em_curso
		processo = @processo || @recurso.processo
		redirect_to processo, alert: "Não é possível adicionar recurso ao processo homologado" if processo.homologado?
	end

	# Permite apenas os parâmetros específicos
	def recurso_params
		params.require(:licitacao_recurso).permit(:data_do_recurso, :motivo, :situacao, :resposta_do_recurso)

	end
end
end
