FactoryBot.define do
	factory :receita_padrao, class: 'Base::NaturezaDaReceita' do
		modulo_type {"Orcamento"}
		modulo_id {
			Orcamento.find_or_create_by!( FactoryBot.attributes_for( :orcamento_2016 ) ).id
		}

		tipo_de_orcamento_id {
			Base::TipoDeOrcamento.find_or_create_by!( FactoryBot.attributes_for(  :orcamento_fiscal, :orcamento_2016 ) ).id
		}

		descricao {'receita teste'}

		tipo_de_receita {'primaria'}
		evento_contabil_obrigatorio {true}
		historico_padrao {'teste'}
		legislacao_da_receita {'teste'}
		padrao {false}
		novo_tipo {false}
		percentual_de_aplicacao_na_educacao {25}
		percentual_de_aplicacao_na_saude {15}
		pedir_cadastro_de_convenio {true}
		percentual_para_legislativo {1}

		trait :novo_tipo do
			novo_tipo {true}
			tipo_de_deducao_id {
				Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_sem_deducao ) ).id
			}
		end

		trait :criar_niveis_acima do
			before(:create) { |receita|
				codigo_da_iteracao = ''
				niveis = receita.classificacao_com_niveis_utilizados.values
				niveis.pop
				niveis.each do |nivel|
					codigo_da_iteracao += nivel
					codigo_completo = Base::NaturezaDaReceita.completar_codigo_com_zeros(codigo_da_iteracao, receita.novo_tipo)

					if receita.novo_tipo
						nova_natureza_receita_corrente = FactoryBot.build(:nova_natureza_receita_corrente, codigo: codigo_completo)
						nova_natureza_receita_corrente.receita_stn_id = Base::ReceitaStn.find_or_create_by(FactoryBot.attributes_for :receita_analitica_stn).id
 						nova_natureza_receita_corrente.run_callbacks :validation
 						nova_natureza_receita_corrente.save(validate: false)

						nova_natureza_receita_corrente.save
					else
						Base::NaturezaDaReceita.find_or_create_by!(FactoryBot.attributes_for(:natureza_receita_corrente, codigo: codigo_completo))
					end
				end
			}
		end
	end

	factory :nova_natureza_receita_corrente_pai, parent: :receita_padrao do
		novo_tipo { true }
		descricao {"Nova Receita Corrente Pai"}
		codigo {"0011110111000000"}
		padrao {true}

		receita_stn_id {
			FactoryBot.create(:receita_analitica_stn).id
		}
		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end

	factory :nova_natureza_receita_corrente, parent: :receita_padrao do
		novo_tipo { true }
		descricao {"Nova Receita Corrente"}
		codigo {"0011110111500000"}
		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end


	factory :nova_natureza_receita_capital, parent: :receita_padrao do
		novo_tipo { true }
		descricao {"Nova Receita de Capital"}
		codigo {"0021110111500000"}
		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end

	factory :nova_natureza_receita_intra, parent: :receita_padrao do
		novo_tipo { true }
		descricao {"Nova Receita Intra"}
		codigo {"0071110111500000"}
		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end

	factory :nova_natureza_receita_deducao, parent: :receita_padrao do
		novo_tipo { true }
		descricao {"Nova Receita Dedução"}
		codigo {"9711110111500000"}
		pedir_cadastro_de_convenio {false}

		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end

	factory :nova_natureza_receita_intra_deducao, parent: :receita_padrao do
		novo_tipo { true }
		descricao {"Nova Receita Intra Dedução"}
		codigo {"9771110111500000"}

		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end

	factory :nova_natureza_receita_corrente_com_tipo_zero, parent: :nova_natureza_receita_corrente_pai do
		codigo {"0011110110000000"}
		analitica {false}
		tipo_de_deducao_id {
			Loa::TipoDeDeducao.find_or_create_by!( FactoryBot.attributes_for(  :tipo_de_deducao_educacao ) ).id
		}
	end

	factory :natureza_receita_corrente_pai, parent: :receita_padrao do
		descricao {"Receita Corrente Pai"}
		codigo {"1235100000"}
	end

	factory :natureza_receita_corrente, parent: :receita_padrao do
		descricao {"Receita Corrente"}
		codigo {"1235109900"}
	end

	factory :deducao_da_receita, parent: :receita_padrao do
		descricao {"Deducao de Receita para a Formacao do FUNDEB - ICMS"}
		codigo {"9517220101"}
		tipo_de_receita {'financeira'}
	end

	factory :natureza_receita_intra, parent: :receita_padrao do
		descricao {"Receita Intra"}
		codigo {"7517220101"}
	end
end
