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

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_ocorrencia, only: [:show, :edit, :update, :destroy]
	before_action :set_processo, only: [:create, :new, :baseline]
	before_action :carrega_tipos, only: [:new, :edit, :create, :update]
	before_action :valida_se_processo_esta_em_curso, except: [:show, :baseline]

	# GET /licitacao/ocorrencias/1
	def show
	end

	# GET /licitacao/processos/1/ocorrencias/new
	def new
		@ocorrencia = @processo.ocorrencias.new
	end

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

	# POST /licitacao/processos/1/ocorrencias
	def create
		begin
			@ocorrencia = @processo.ocorrencias.new(ocorrencia_params)
			if @ocorrencia.save
				redirect_to licitacao_processo_path(@processo, tab: "ocorrencias"), notice: 'Ocorrência foi criada com sucesso.'
			else
				render :new
			end
		rescue => e
			flash[:alert] = e.message
			render :new
		end
	end

	# PATCH/PUT /licitacao/ocorrencias/1
	def update
		if @ocorrencia.update( ocorrencia_params )
			redirect_to licitacao_processo_path(@ocorrencia.processo, tab: "ocorrencias"), notice: 'Ocorrência foi atualizada com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /licitacao/ocorrencias/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@ocorrencia)
		@ocorrencia.processo.em_sessao!
		redirect_to licitacao_processo_path(@ocorrencia.processo, tab: "ocorrencias"), mensagem
	end

	def baseline
	end

	private
	def carrega_tipos
		@tipos_de_ocorrencias = Licitacao::Ocorrencia.tipos.select {|tipo| tipo == "suspensao" || tipo == "retomada" || tipo == "outros" }
	end

	def set_ocorrencia
		@ocorrencia = Licitacao::Ocorrencia.find( params[:id] )
	end

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

	def valida_se_processo_esta_em_curso
		processo = @processo || @ocorrencia.processo
		redirect_to processo, alert: "Não é possível adicionar ocorrência após a sessão" if processo.pos_sessao_em_diante?
	end

	# Permite apenas os parâmetros específicos
	def ocorrencia_params
		params.require(:licitacao_ocorrencia).permit(:data_da_ocorrencia, :horario_da_ocorrencia, :motivo, :tipo)
	end
end
end
