class Ppa::Objetivo < ApplicationRecord
	include IncrementadorDeCodigoConcern
	has_paper_trail

	belongs_to :programa
	belongs_to :orgao

	has_many :metas, dependent: :destroy
	has_many :iniciativas, dependent: :restrict_with_exception

	validates_presence_of :descricao, :codigo, :orgao_id, :programa_id

	validates :programa_id, immutable: true

	validates_uniqueness_of :descricao, scope: :programa_id
	validates_uniqueness_of :codigo, scope: :programa_id
	validate :deve_ter_o_mesmo_ppa_do_orgao_responsavel

	after_initialize :sugestao_de_codigo, if: :new_record?

	def deve_ter_o_mesmo_ppa_do_orgao_responsavel
		if programa.try(:ppa_id) != orgao.try(:ppa_id)
			errors[:programa_id] << "deve pertencer ao mesmo PPA do Orgão Responsável"
		end
	end

	def codigo_com_zeros
		self.codigo.try(:digitos, 3)
	end

	private
	def sugestao_de_codigo
		gerar_sugestao_codigo( :codigo, 3, {programa_id: programa_id} ) if (programa.present? && codigo.blank?)
	end
end
