class Ppa::ValoresDoConvenioController < ApplicationController
	include ControllerConcern
	include PpaControllersConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_convenio, only: [:edit, :update]
	before_action :disponibiliza_dependencias, only: [:edit]
	before_action :convenio_tem_receitas

	def edit

	end

	def update
		respond_to do |format|
			parametros = valores_do_convenio_params

			@convenio.orgao_id = @convenio.unidade_orcamentaria.orgao.id if @convenio.unidade_orcamentaria.present?
			begin
				if @convenio.update(parametros)
					format.html { redirect_to @convenio, notice: 'Valores do convênio atualizados com sucesso.' }
					format.json { render json: @convenio.valores_do_convenio, status: :updated, location: @convenio }
				else
					disponibiliza_dependencias
					format.html { render :edit }
					format.json { render json: @convenio.errors, status: :unprocessable_entity }
				end
			rescue Exception
				disponibiliza_dependencias
				flash.now[:alert] = "Ocorreu um erro ao atualizar os valores do convênio"
				format.html { render :edit }
			end
		end
	end

	def disponibiliza_dependencias
		@valores_correntes_do_convenio = @convenio.valores_do_convenio.select {|convenio|
			convenio.tipo_de_despesa_id == Base::TipoDeDespesa.despesa_corrente.id
		}
		@valores_de_capital_do_convenio = @convenio.valores_do_convenio.select {|convenio|
			convenio.tipo_de_despesa_id == Base::TipoDeDespesa.despesa_de_capital.id
		}
	end

	private
	def set_convenio
		@convenio = Ppa::Convenio.find( params[:convenio_id] )
	end

	def valores_do_convenio_params
		params.require(:ppa_convenio).permit( valores_do_convenio_attributes: [:id, :valor])
	end

	def convenio_tem_receitas
		unless @convenio.tem_receitas?
			redirect_to @convenio, alert: 'Não é possível detalhar valores para um convênio sem receita'
		end
	end
end
