module Obra
	class DocumentosDaObraController < ApplicationController
		include ControllerConcern
		include ObraControllersConcern
		include Contabilidade::ObrasHelper
		include DocumentosDaObraHelper

		before_action -> { verifica_modulo_na_sessao(["contabilidade", "administrativo", "obra"]) }
		before_action :authenticate_usuario!
		before_action :autoriza_usuario!, except: [:modelos, :retorna_modelo]
		before_action :set_obra, only: [:new, :create, :retorna_modelo]
		before_action :set_processo, only: [:new, :create, :retorna_modelo]
		before_action :set_documento_da_obra, only: [:show, :edit, :update, :destroy]
		before_action :disponibiliza_dependencias, only: [:new, :edit]

		# GET /obra/documentos_da_obra
		def index
			@q = Obra::DocumentoDaObra.where(tipo_de_documento: 8).order("id DESC, data_do_documento DESC").ransack(query_params)
			@documentos_da_obra = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end

		# GET /obra/documentos_da_obra/new
		def new
			@documento_da_obra = @obra.documentos_da_obra.new
			disponibiliza_dependencias
		end

		# GET /obra/documentos_da_obra/1/edit
		def edit
			disponibiliza_dependencias
		end

		# GET /obra/documentos_da_obra/1
		def show
		end

		# POST /obra/documentos_da_obra
		def create
			@documento_da_obra = @obra.documentos_da_obra.new(documento_da_obra_params)
			@documento_da_obra.usuario = current_usuario
			if @documento_da_obra.save
				redirect_to rota_obra(@documento_da_obra.obra), notice: 'Documento do obra foi criado com sucesso.'
			else
				disponibiliza_dependencias
				render :new
			end
		end

		# PATCH/PUT /obra/documentos_da_obra/1
		def update
			if @documento_da_obra.update( documento_da_obra_params )
				redirect_to rota_obra(@documento_da_obra.obra), notice: 'Documento do obra foi atualizado com sucesso.'
			else
				disponibiliza_dependencias
				render :edit
			end
		end

		# DELETE /obra/documentos_da_obra/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@documento_da_obra)
			redirect_to rota_obra(@documento_da_obra.obra), mensagem
		end

		def retorna_modelo
			@modelo = Licitacao::ModeloDeDocumento.find(params[:modelo_id])
			@configuracao = Configuracao.last
			@contrato = @obra.contrato
			@processo = @contrato.try(:projeto)
			@pedido = @processo.try(:pedido)

			respond_to do |format|
				format.js
			end
		end

		def modelos
			@obra = Contabilidade::Obra.find(params[:obra_id])
			if params[:id] == 'termo_de_paralisacao'
				@modelos = Licitacao::ModeloDeDocumento.where(tipo: 13)
			elsif params[:id] == 'termo_de_conclusao'
				@modelos = Licitacao::ModeloDeDocumento.where(tipo: 14)
			elsif params[:id] == 'termo_de_reinicio'
				@modelos = Licitacao::ModeloDeDocumento.where(tipo: 15)
			else
				@modelos = Licitacao::ModeloDeDocumento.where(tipo: 99)
			end
			render json: @modelos
		end

		private
		def set_documento_da_obra
			@documento_da_obra = Obra::DocumentoDaObra.find( params[:id] )
		end

		def set_obra
			if params[:action] == "update" || params[:action] == "edit"
				@obra = Obra::DocumentoDaObra.find(params[:id]).obra
			else
				@obra = Contabilidade::Obra.find(params[:obra_id])
			end
		end

		def set_processo
			if params[:action] == "update" || params[:action] == "edit"
				@processo = Obra::DocumentoDaObra.find(params[:id]).obra.contrato.projeto
			else
				@processo = Contabilidade::Obra.find(params[:obra_id]).contrato.projeto
			end
		end

		def disponibiliza_dependencias
			@tipos_de_documentos_das_obras = Obra::DocumentoDaObra.tipos_de_documento
			@modelos_de_documentos = []
			@tipos_de_termo = Contabilidade::SituacaoDaObra.tipo_de_termos
		end

		# Permite apenas os parâmetros específicos
		def documento_da_obra_params
			params.require(:obra_documento_da_obra).permit(:tipo_de_documento, :data_inicio_paralisacao, :data_fim_paralisacao,
				:obra_id, :data_do_documento, :texto, :usuario_id, :documento, :numero, :modelo_do_documento_id, :tipo_de_termo)
		end
	end
end
