module Licitacao
	class PublicacoesController < ApplicationController
		include ControllerConcern
		include LicitacaoControllersConcern

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!
		before_action :set_publicacao, only: [:edit, :update, :destroy]
		before_action :disponibiliza_dependencias, only: [:new, :edit,:update,:create]
		before_action :set_projeto, only: [:new, :create, :edit]

		# GET /licitacao/publicacoes/new
		def new
			@publicacao = @projeto.publicacoes.new
		end

		# GET /licitacao/publicacoes/1/edit
		def edit
			redirect_to licitacao_processo_path(@projeto) + "?tab=publicacoes", alert: 'Não é possivel editar, processo já homologado' and return if @projeto.homologado? && !@projeto.dispensa_de_licitacao?
		end

		# POST /licitacao/publicacoes
		def create
			@publicacao = @projeto.publicacoes.new(publicacao_params)
			if @projeto.update_attributes(projeto_params) && @publicacao.save
				redirect_to licitacao_processo_path(@projeto) + "?tab=publicacoes", success: 'Publicação registrada com sucesso.'
			else
				erros = []
				@projeto.errors.full_messages.each do |erro|
					erros << erro
				end
				if @projeto.errors.any?
					flash[:alert] = "Ocorreu um erro no processo: #{erros.to_a.join(', ')}"
				else
					flash[:alert] = "Não é possível criar a publicação, confira os dados colocados."
				end
				render :new
			end
		end

		# PATCH/PUT /licitacao/publicacoes/1
		def update
			@projeto = @publicacao.projeto
			if @publicacao.update( publicacao_params )
				redirect_to licitacao_processo_path(@projeto) + "?tab=publicacoes", notice: 'Publicacao foi atualizado(a) com sucesso.'
			else
				render :edit
			end
		end

		# DELETE /licitacao/publicacoes/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@publicacao)
			redirect_to licitacao_processo_path(@publicacao.projeto) + "?tab=publicacoes", mensagem
		end

		def disponibiliza_dependencias
			@tipos_de_publicacao = Licitacao::Publicacao.tipos_de_publicacao
		end

		private
		def set_publicacao
			@publicacao = Publicacao.find( params[:id] )
		end

		def set_projeto
			@projeto = Licitacao::Projeto.find( params[:projeto_id] )
		end


		# Permite apenas os parâmetros específicos
		def publicacao_params
			params.require(:licitacao_publicacao).permit(:data_de_publicacao_no_flanelografo, :anexo ,:projeto_id, :sequencia, :data_da_publicacao, :tipo_de_publicacao, :local_publicado)
		end

		def projeto_params
			params.require(:licitacao_projeto).permit(:data_da_sessao, :horario_da_abertura)
		end

	end
end
