NUMBER_OF_GUESTS = 50

TablesArrangement.delete_all
Expense.delete_all
Guest.delete_all
ActsAsTaggableOn::Tagging.delete_all
ActsAsTaggableOn::Tag.delete_all

Expense.create!(name: 'Photographer', amount: 3000, pricing_type: 'fixed')
Expense.create!(name: 'Country house', amount: 6000, pricing_type: 'fixed')
Expense.create!(name: 'Catering', amount: 200, pricing_type: 'per_person')
Expense.create!(name: 'Flowers', amount: 500, pricing_type: 'fixed')
Expense.create!(name: 'Band', amount: 1000, pricing_type: 'fixed')
Expense.create!(name: 'Wedding planner', amount: 2000, pricing_type: 'fixed')
Expense.create!(name: 'Dress', amount: 1000, pricing_type: 'fixed')
Expense.create!(name: 'Suit', amount: 500, pricing_type: 'fixed')
Expense.create!(name: 'Rings', amount: 1000, pricing_type: 'fixed')
Expense.create!(name: 'Makeup', amount: 200, pricing_type: 'fixed')
Expense.create!(name: 'Hair', amount: 200, pricing_type: 'fixed')
Expense.create!(name: 'Transportation', amount: 3000, pricing_type: 'fixed')
Expense.create!(name: 'Invitations', amount: 200, pricing_type: 'fixed')
Expense.create!(name: 'Cake', amount: 500, pricing_type: 'fixed')


samples = {
  close_family_a: 10,
  close_family_b: 10,
  cousins_a: 20,
  cousins_b: 15,
  relatives_a: 15,
  relatives_b: 10,
  work_a: 10,
  work_b: 10,
  besties_work_a: 5,
  besties_work_b: 5,
  college_friends_a: 10,
  college_friends_b: 10,
  high_school_friends_a: 10,
  high_school_friends_b: 10,
  childhood_friends_a: 10,
  childhood_friends_b: 10,
  basket_team_a: 10,
  football_team_a: 15,
  dance_club: 10
}.each_with_object([]) do |(affinity_group, count), acc|
  count.times { acc << affinity_group }
end

NUMBER_OF_GUESTS.times do
  guest = Guest.create!(first_name: Faker::Name.first_name,
                        last_name: Faker::Name.last_name,
                        email: Faker::Internet.email,
                        phone: Faker::PhoneNumber.cell_phone)

  guest.affinity_group_list.add(samples.sample)
  guest.save!
end

# Add unbreakable bonds
Guest.affinity_group_counts.each do |group|
  couples = (group.taggings_count / 4).floor

  guests_involved = Guest.tagged_with(group.name).limit(couples * 2)
  guests_involved.each_slice(2) do |a, b|
    bond_name = "#{a.full_name} & #{b.full_name}"

    a.unbreakable_bond_list.add(bond_name)
    b.unbreakable_bond_list.add(bond_name)

    a.save!
    b.save!
  end
end