class Loa::OrcamentosDaReceitaController < ApplicationController
	include LoaControllersConcern
	include ControllerConcern
	include Loa::OrcamentosDaReceitaHelper

	before_action :bloquear_orcamento, only: [:new, :edit, :destroy]
	before_action :set_natureza_da_receita, only: [:edit, :update]
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action only: [:edit, :update] do
		verifica_autorizacao_para_status_de_orcamento_helper('aberto')
	end

	def edit
		disponibiliza_dependencias
	end

	def update
		if params.has_key?(:base_natureza_da_receita)
			parametros = orcamento_da_receita_params

			if (parametros[:unidades_orcamentarias_por_natureza_da_receita_attributes]).present?
				parametros[:unidades_orcamentarias_por_natureza_da_receita_attributes].each do |unidade_orcamentaria|
					unidade_orcamentaria[1][:status_do_orcamento] = orcamento_atual[:status]
					if (unidade_orcamentaria[1][:orcamentos_da_receita_attributes]).present?
						unidade_orcamentaria[1][:orcamentos_da_receita_attributes].each do |fonte_de_recurso|
							fonte_de_recurso[1][:status_do_orcamento] = orcamento_atual[:status]
						end
					end
				end
			end

			if @natureza_da_receita.update( parametros )
				redirect_to @natureza_da_receita, notice: 'Orcamento da receita foi atualizado com sucesso.'
			else
				disponibiliza_dependencias
				errors_string = @natureza_da_receita.errors[:base].inject("") { |mensagem, erro| mensagem += erro }

				flash.now[:alert] = errors_string if @natureza_da_receita.errors[:base].present?
				render :edit
			end
		else
			redirect_to @natureza_da_receita
		end
	end

	private
	def set_natureza_da_receita
		@natureza_da_receita = Base::NaturezaDaReceita.find( params[:id] )
	end

	def disponibiliza_dependencias
		@unidades_orcamentarias = orcamento_atual.unidades_orcamentarias.where(is_unidade_arrecadadora: true).order(:codigo)
		@fontes_de_recursos = orcamento_atual.fontes_de_recursos.where("base_fontes_stn.codigo_tipo_exercicio = 1")
		@fontes_de_recursos_obrigatorias =  JSON.generate(fontes_por_natureza(@natureza_da_receita))
	end

	# Permite apenas os parâmetros específicos
	def orcamento_da_receita_params
		params.require(:base_natureza_da_receita).permit(
			:valor_previsto,
			unidades_orcamentarias_por_natureza_da_receita_attributes:[
				:id, :unidade_orcamentaria_id, :_destroy,
				orcamentos_da_receita_attributes: [
					:id, :fonte_de_recursos_id, :valor, :porcentagem, :_destroy
				]
			]
		)
	end
end
