FactoryBot.define do
	factory :pedido, class: 'Licitacao::Pedido' do
		data_do_pedido {Date.parse("2016-10-18")}
		data_limite_para_complementacao {Date.today}
		objeto {'teste'}
		status {'aberto'}
		justificativa {"teste"}
		projeto_simplificado {false}
		vigencia {"12 meses"}
		local_de_entrega {"Rua A"}
		unidade_orcamentaria_id {
			uo = Loa::UnidadeOrcamentaria.find_by( FactoryBot.attributes_for(:loa_hgf, :orcamento_2016) ) || FactoryBot.create(:loa_hgf, :orcamento_2016)
			uo.ordenadores_de_despesa.create( FactoryBot.attributes_for(:ordenador_de_despesa) )
			uo.try(:id)
		}

		orcamento_id {
			Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016) ).id
		}

		usuario_id {2}

		convidar_unidades {true}

		categorias_do_pedido_attributes {
			{"0" => {categoria_id: (Base::Categoria.find_by(codigo: '12', categoria_superior: nil) || Base::Categoria.find_or_create_by!(FactoryBot.attributes_for( :categoria ))).id}}
		}

		prazo_de_entrega {1}

		outras_informacoes {'outras informações'}

		trait :simplificado do
			projeto_simplificado {true}
			status {:projeto_gerado}
			after(:create) do |pedido|
				item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id, preco_estimativo: 34)
				item_do_pedido.save!

				outro_item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id, preco_estimativo: 40)
				outro_item_do_pedido.save!
			end
		end

		trait :fechado do
			##
			# Um pedido com a trait :fechado possui:
			# 2 Itens
			# 1 unidade orçamentária
			# 10 quantidades pra cada item (como definido na factory de item do pedido)
			# Total de itens do pedido: 20
			#
			# 2 Fornecedores
			# primeiro fornecedor
			# => primeiro item a 10 reais. total: 100 reais
			# => segundo item a 60 reais. total: 600 reais
			# segundo fornecedor
			# => primeiro item a 20 reais. total: 200 reais
			# => segundo item a 30 reais. total: 300 reais
			##

			status {:fechado}
			after(:create) do |pedido|
				item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id)
				item_do_pedido.save!

				outro_item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id)
				outro_item_do_pedido.save!

				pessoa_do_pedido = FactoryBot.create(:pessoa_do_pedido, pedido_id: pedido.id)
				outra_pessoa_do_pedido = FactoryBot.create(:pessoa_do_pedido, pedido_id: pedido.id)

				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: item_do_pedido, pessoa_do_pedido_id: pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 10)
				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: outro_item_do_pedido, pessoa_do_pedido_id: pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 60)

				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: item_do_pedido, pessoa_do_pedido_id: outra_pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 20)
				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: outro_item_do_pedido, pessoa_do_pedido_id: outra_pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 30)
			end
		end

		trait :aguardando_outras_unidades do
			status {:aguardando_outras_unidades}
			after(:create) do |pedido|
				item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id)
				item_do_pedido.save!

				uo = FactoryBot.create(:loa_seduc, :orcamento_2016)
				uo.save!

				unidade_orcamentaria_por_pedido = FactoryBot.create(:unidade_orcamentaria_por_pedido, pedido_id: pedido.id, unidade_orcamentaria_id: uo.id)
				unidade_orcamentaria_por_pedido.save!

				Licitacao::ItemDoPedidoPorUnidadeOrcamentaria.create!(item_do_pedido_id: item_do_pedido.id, quantidade: 1,unidade_orcamentaria_por_pedido_id: unidade_orcamentaria_por_pedido.id)
			end
		end

		trait :com_itens do
			after(:create) do |pedido|
				item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id, preco_estimativo: 10)
				item_do_pedido.save!

				outro_item_do_pedido = FactoryBot.build(:item_do_pedido, pedido_id: pedido.id, preco_estimativo: 20)
				outro_item_do_pedido.save!

				pessoa_do_pedido = FactoryBot.create(:pessoa_do_pedido, pedido_id: pedido.id)
				outra_pessoa_do_pedido = FactoryBot.create(:pessoa_do_pedido, pedido_id: pedido.id)

				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: item_do_pedido, pessoa_do_pedido_id: pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 10)
				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: outro_item_do_pedido, pessoa_do_pedido_id: pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 60)

				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: item_do_pedido, pessoa_do_pedido_id: outra_pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 20)
				FactoryBot.create(:licitacao_item_do_pedido_por_pessoa, item_do_pedido: outro_item_do_pedido, pessoa_do_pedido_id: outra_pessoa_do_pedido.id, marca: 'marca teste', preco_de_cotacao: 30)
			end
		end

		trait :com_itens_por_valor do
			after(:create) do |pedido|
				pedido.itens_do_pedido.build(item_id: 1, tipo: 0, por_valor_previsto: true).save
				pedido.itens_do_pedido.last.itens_do_pedido_por_unidade_orcamentaria.update(valor_previsto_desconto: 100)
				pedido.itens_do_pedido.last.update_attribute(:por_valor_previsto, true)
			end
		end

		trait :com_unidades_orcamentarias_por_pedido do
			after(:create) do |pedido|
				FactoryBot.create(:unidade_orcamentaria_por_pedido, pedido_id: pedido.id)
			end
		end

	end
end
