module Contabilidade
	class ComitesDeInvestimentoController < ApplicationController
		include ControllerConcern
		include ContabilidadeControllerConcern

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!, except: [:extinguir_comite]
		before_action :set_comite_de_investimento, only: [:show, :edit, :update, :destroy, :extinguir_comite]
		before_action :disponibiliza_dependencias, only: [:create, :new, :update, :edit, :index, :show]

		# GET /contabilidade/comites_de_investimento
		def index
			@q = ComiteDeInvestimento.order('data_da_criacao ASC, data_de_extincao DESC').search(params[:q])
			@comites_de_investimento = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end

		# GET /contabilidade/comites_de_investimento/1
		def show
		end

		# GET /contabilidade/comites_de_investimento/new
		def new
			@comite_de_investimento = ComiteDeInvestimento.new
		end

		# GET /contabilidade/comites_de_investimento/1/edit
		def edit
		end

		# POST /contabilidade/comites_de_investimento
		def create
			@comite_de_investimento = ComiteDeInvestimento.new(comite_de_investimento_params)
			@comite_de_investimento.orcamento = contexto_atual
			if @comite_de_investimento.save
				redirect_to @comite_de_investimento, notice: 'Comite de investimento foi criado(a) com sucesso.'
			else
				render :new
			end
		end

		# PATCH/PUT /contabilidade/comites_de_investimento/1
		def update
			if @comite_de_investimento.update( comite_de_investimento_params )
				redirect_to @comite_de_investimento, notice: 'Comite de investimento foi atualizado(a) com sucesso.'
			else
				render :edit
			end
		end

		# DELETE /contabilidade/comites_de_investimento/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@comite_de_investimento)
			redirect_to contabilidade_comites_de_investimento_url, mensagem
		end

		def extinguir_comite
			return if bloqueia_usuario_com_base_em 'update'

			if params[:data_de_extincao] != "" && params[:decreto_de_extincao_id] != ""
				@comite_de_investimento.update(decreto_de_extincao_id: params[:decreto_de_extincao_id],data_de_extincao: params[:data_de_extincao] )

				@comite_de_investimento.membros_dos_comites_de_investimento.each do |membro|
					membro.update(data_de_saida: @comite_de_investimento.data_de_extincao)
				end
					redirect_to @comite_de_investimento, notice: 'Comitê foi extinto com sucesso.'
			else
				redirect_to @comite_de_investimento, notice: 'Preencha os campos pedidos para extinguir o comitê'
			end
		end

		def disponibiliza_dependencias
			@decretos = Contabilidade::Decreto.where(tipo_de_decreto: :rpps).where(funcao_do_instrumento_legal: :reestruturacao_alteracao)
			@decretos_de_extincao = Contabilidade::Decreto.where(tipo_de_decreto: :rpps).where(funcao_do_instrumento_legal: :extincao)
		end

		private
		def set_comite_de_investimento
			@comite_de_investimento = ComiteDeInvestimento.find( params[:id] )
		end

		# Permite apenas os parâmetros específicos
		def comite_de_investimento_params
			params.require(:contabilidade_comite_de_investimento).permit(:data_da_criacao, :decreto_id, :data_de_extincao, :codigo, :orcamento_id,
			membros_dos_comites_de_investimento: [:id, :pessoa_id, :comissao_id, :_destroy])
		end
	end
end
