module Licitacao
class DocumentosDoContratoController < ApplicationController
	include ControllerConcern
	include DocumentosDoContratoHelper

	protect_from_forgery except: :retorna_modelo

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:retorna_modelo]
	before_action :set_contrato, only: [:new, :create, :retorna_modelo]
	before_action :set_documento_do_contrato, only: [:show, :edit, :update, :destroy]

	# GET /licitacao/documentos_do_contrato/1
	def show
	end

	# GET /licitacao/documentos_do_contrato/new
	def new
		@documento_do_contrato = @contrato.documentos_do_contrato.new
		disponibiliza_dependencias
	end

	# GET /licitacao/documentos_do_contrato/1/edit
	def edit
		disponibiliza_dependencias
	end

	# POST /licitacao/documentos_do_contrato
	def create
		@documento_do_contrato = @contrato.documentos_do_contrato.new(documento_do_contrato_params)
		@documento_do_contrato.usuario = current_usuario

		if @documento_do_contrato.save
			redirect_to @documento_do_contrato.contrato, notice: 'Documento do contrato foi criado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /licitacao/documentos_do_contrato/1
	def update
		if @documento_do_contrato.update( documento_do_contrato_params )
			redirect_to @documento_do_contrato.contrato, notice: 'Documento do contrato foi atualizado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /licitacao/documentos_do_contrato/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@documento_do_contrato)
		redirect_to licitacao_contrato_path(@documento_do_contrato.contrato), mensagem
	end

	def retorna_modelo
		return if bloqueia_usuario_com_base_em 'create'
		@modelo = Licitacao::ModeloDeDocumento.find(params[:modelo_id])
		@configuracao = Configuracao.last
		@processo = @contrato.projeto
		@pedido = @processo.pedido

		respond_to do |format|
			format.js
		end
	end

	# GET /licitacao/documentos_do_contrato/:contrato_id/modelos
	def modelos
		if params[:lei].present?
			@modelos = Licitacao::ModeloDeDocumento.where(tipo: [2, 9, 99]).where(lei: params[:lei])
		else
			@modelos = Licitacao::ModeloDeDocumento.where(tipo: [2, 9, 99])
		end

		respond_to do |format|
			format.json {render json: @modelos}
		end
	end

	private
	def set_documento_do_contrato
		@documento_do_contrato = DocumentoDoContrato.find( params[:id] )
	end

	def set_contrato
		@contrato = Licitacao::Contrato.find(params[:contrato_id])
	end

	def disponibiliza_dependencias
		@modelos_de_documentos = Licitacao::ModeloDeDocumento.where(tipo: [Licitacao::ModeloDeDocumento.tipos[:contrato], Licitacao::ModeloDeDocumento.tipos[:minuta_de_contrato], Licitacao::ModeloDeDocumento.tipos[:outros_documentos]])
		@leis = Licitacao::ModeloDeDocumento.leis
		@tipos_de_documento = Licitacao::DocumentoDoContrato.tipos_de_documento
	end

	# Permite apenas os parâmetros específicos
	def documento_do_contrato_params
		params.require(:licitacao_documento_do_contrato).permit(:data_do_documento, :texto, :usuario_id, :contrato_id, :documento, :modelo_do_documento_id, :numero, :titulo_personalizado, :enviar_para_pncp, :tipo_de_documento)
	end
end
end
