module Obra
	class ContratosDaObraController < ApplicationController
		include ControllerConcern
		include Contabilidade::ObrasHelper
		include ObraControllersConcern

		before_action -> { verifica_modulo_na_sessao(["contabilidade", "administrativo", "obra"]) }
		before_action :authenticate_usuario!
		before_action :autoriza_usuario!
		before_action :set_obra, only: [:new, :create]
		before_action :set_contrato_da_obra, only: [:edit, :update, :destroy]
		before_action :disponibiliza_dependencias, only: [:new, :edit]

		# GET /obra/contratos_da_obra/new
		def new
			@contrato_da_obra = @obra.contratos_da_obra.new
		end

		# GET /obra/contratos_da_obra/1/edit
		def edit
		end

		# POST /obra/contratos_da_obra
		def create
			@contrato_da_obra = @obra.contratos_da_obra.new(contrato_da_obra_params)
			if @contrato_da_obra.save
				redirect_to contabilidade_obra_path(@obra, tab: "contratos_da_obra"), notice: 'Contrato da obra foi criado com sucesso.'
			else
				disponibiliza_dependencias
				render :new
			end
		end

		# PATCH/PUT /obra/contratos_da_obra/1
		def update
			if @contrato_da_obra.update( contrato_da_obra_params )
				redirect_to contabilidade_obra_path(@contrato_da_obra.obra, tab: "contratos_da_obra"), notice: 'Contrato da obra foi atualizado com sucesso.'
			else
				disponibiliza_dependencias
				render :edit
			end
		end

		# DELETE /obra/contratos_da_obra/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@contrato_da_obra)
			redirect_to @contrato_da_obra.obra, mensagem
		end

		private

		def set_contrato_da_obra
			@contrato_da_obra = Obra::ContratoDaObra.find( params[:id] )
			@obra = @contrato_da_obra.obra
		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 disponibiliza_dependencias
			@contratos = Licitacao::Contrato.joins('LEFT JOIN obra_contratos_da_obra ON licitacao_contratos.id = obra_contratos_da_obra.contrato_id')
				.where.not(id: @obra.contrato_id).where(tipo_de_contrato: [Licitacao::Contrato.tipos_de_contratos["contrato_de_obras"], Licitacao::Contrato.tipos_de_contratos["servico_de_engenharia"]])
					.where('obra_contratos_da_obra.contrato_id IS NULL').order(created_at: :desc)
		end

		# Permite apenas os parâmetros específicos
		def contrato_da_obra_params
			params.require(:obra_contrato_da_obra).permit(:obra_id, :contrato_id)
		end
	end
end
