require 'aasm'
require 'active_support/concern'

module StatusLoaConcern
	extend ActiveSupport::Concern
	included do
		include AASM

		aasm column: :status, enum: true, whiny_transitions: false do
			state :gerando_dependencias, :initial => true
			state :conferindo_geracao
			state :aberto
			state :enviado_para_votacao
			state :em_alteracao
			state :aprovado
			state :encerrado
			state :fechado # não sera utilizado

			event :gerar_dependencias do
				transitions from: :gerando_dependencias, to: :conferindo_geracao
			end

			event :finalizar_conferencia do
				transitions from: :conferindo_geracao, to: :aberto
			end

			event :enviar_para_votacao do
				transitions from: :aberto, to: :enviado_para_votacao do
					guard do
						quantidade_de_acoes_sem_metas_fisicas == 0 && self.quantidade_de_despesas_a_preencher.to_i == 0
					end
				end
				transitions from: :em_alteracao, to: :enviado_para_votacao do
					guard do
						quantidade_de_acoes_sem_metas_fisicas == 0 && self.quantidade_de_despesas_a_preencher.to_i == 0
					end
				end
			end

			event :enviar_para_alteracao do
				transitions from: :enviado_para_votacao, to: :em_alteracao
			end

			event :aprovar do
				transitions from: :aberto, to: :aprovado do
					guard do
						self.numero_da_lei.present? && quantidade_de_acoes_sem_metas_fisicas == 0 && self.quantidade_de_despesas_a_preencher.to_i == 0
					end
				end
				transitions from: :enviado_para_votacao, to: :aprovado do
					guard do
						self.numero_da_lei.present? && quantidade_de_acoes_sem_metas_fisicas == 0 && self.quantidade_de_despesas_a_preencher.to_i == 0
					end
				end
			end

			event :encerrar do
				transitions from: :aprovado, to: :encerrado
			end
		end
	end
end