class Contabilidade::EmpresasDaObraController < ApplicationController
	include ControllerConcern
	include Contabilidade::ObrasHelper

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

	def index
		@q = Contabilidade::EmpresaDaObra.order(:id).search(params[:q])
		@empresas_da_obra = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	def show
	end

	def edit
	end

	def new
		@empresa_da_obra = @obra.empresas_da_obra.new
	end

	def create
		@empresa_da_obra = @obra.empresas_da_obra.new( empresa_da_obra_params )
		if @empresa_da_obra.save
			redirect_to rota_obra(@empresa_da_obra.obra), notice: 'Empresa adicionado com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	def update
		if @empresa_da_obra.update( empresa_da_obra_params )
			redirect_to rota_obra(@empresa_da_obra.obra), notice: 'Empresa alterada com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	def destroy
		mensagem = apaga_e_retorna_mensagem(@empresa_da_obra)
		redirect_to rota_obra(@empresa_da_obra.obra), mensagem
	end

	private
	def set_empresa_da_obra
		@empresa_da_obra = Contabilidade::EmpresaDaObra.find( params[:id] )
	end

	def set_obra
		@obra = Contabilidade::Obra.find( params[:obra_id] )
	end

	def disponibiliza_dependencias
		@pessoas = @obra.nil? ? contexto_atual.obras.find( params[:obra_id] ).contratos_da_obra.joins(contrato: [contratado: [pessoa_do_projeto: :pessoa]]).select('base_pessoas.*') : @obra.contratos_da_obra.joins(contrato: [contratado: [pessoa_do_projeto: :pessoa]]).select('base_pessoas.*')
	end

	def empresa_da_obra_params
		params.require(:contabilidade_empresa_da_obra).permit( :obra_id, :pessoa_id, :numero_do_crea )
	end
end
