FactoryBot.define do
  factory :node do
    latitude { 1 * GeoRecord::SCALE }
    longitude { 1 * GeoRecord::SCALE }

    changeset

    visible { true }
    timestamp { Time.now.utc }
    version { 1 }

    trait :deleted do
      visible { false }
    end

    trait :with_history do
      after(:create) do |node, _evaluator|
        (1..node.version).each do |n|
          create(:old_node, :node_id => node.id, :version => n, :latitude => node.latitude, :longitude => node.longitude, :changeset => node.changeset)
        end

        # For deleted nodes, make sure the most recent old_node is also deleted.
        if node.visible == false
          latest = node.old_nodes.find_by(:version => node.version)
          latest.visible = false
          latest.save
        end
      end
    end
  end
end
