# frozen_string_literal: true class LogGenerator TIMEZONES = ::ActiveSupport::TimeZone.all.map(&:name).freeze module Format DEATH = "%{player_name} %{reason}" # Trading formats TRADING_PURCHASE_ITEM = "PLAYER: ( %{player_uid} ) %{player_name} PURCHASED ITEM %{item} FOR %{number} POPTABS | PLAYER TOTAL MONEY: %{number}" TRADING_PURCHASE_VEHICLE = "PLAYER: ( %{player_uid} ) %{player_name} PURCHASED VEHICLE %{vehicle} FOR %{number} POPTABS | PLAYER TOTAL MONEY: %{number}" TRADING_PURCHASE_VEHICLE_SKIN = "PLAYER: ( %{player_uid} ) %{player_name} PURCHASED VEHICLE SKIN [%{skin}] (%{vehicle}) FOR %{number} POPTABS | PLAYER TOTAL MONEY: %{number}" TRADING_SOLD_CARGO = "PLAYER: ( %{player_uid} ) %{player_name} SOLD ITEM: %{vehicle} with Cargo [%{item}] FOR %{number} POPTABS AND %{number} RESPECT | PLAYER TOTAL MONEY: %{number}" TRADING_SOLD_ITEM = "PLAYER: ( %{player_uid} ) %{player_name} SOLD ITEM %{vehicle} FOR %{number} POPTABS AND %{number} RESPECT | PLAYER TOTAL MONEY: %{number}" TRADING = [TRADING_PURCHASE_ITEM, TRADING_PURCHASE_VEHICLE, TRADING_PURCHASE_VEHICLE_SKIN, TRADING_SOLD_CARGO, TRADING_SOLD_ITEM].freeze # Territory formats TERRITORY_PURCHASE = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS TO PURCHASE A TERRITORY FLAG | PLAYER TOTAL POP TABS: %{number}" TERRITORY_PROTECT = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS TO PROTECT THEIR OWN TERRITORY #%{number} | PLAYER TOTAL POP TABS: %{number}" TERRITORY_RANSOM = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS FOR THE RANSOM OF TERRITORY #%{number} | PLAYER TOTAL POP TABS: %{number}" TERRITORY_UPGRADE = "PLAYER ( %{player_uid} ) %{player_name} PAID %{number} POP TABS TO UPGRADE TERRITORY #%{number} TO LEVEL %{number} | PLAYER TOTAL POP TABS: %{number}" TERRITORY_STOLE = "PLAYER ( %{player_uid} ) %{player_name} STOLE A LEVEL %{number} FLAG FROM TERRITORY #%{number}" TERRITORY = [TERRITORY_PURCHASE, TERRITORY_PROTECT, TERRITORY_RANSOM, TERRITORY_UPGRADE, TERRITORY_STOLE].freeze end def self.generate_trading_log # Set up the time starting_time = ::Faker::Time.backward(days: ::Faker::Number.between(from: 1, to: 14), period: :morning) starting_time = starting_time.in_time_zone(TIMEZONES.sample) end_time = starting_time.end_of_day output = [] ::Faker::Number.between(from: 1, to: 250).times do current_format = Format::TRADING.sample current_time = ::Faker::Time.between(from: starting_time, to: end_time) formatted_entry = current_format % { player_uid: ::Faker::Number.number(digits: 17).to_s, player_name: ::Faker::Name.name, item: ::Faker::Commerce.product_name, number: ::Faker::Number.between(from: 1, to: 1_000_000), vehicle: ::Faker::Commerce.product_name, skin: ::Faker::Commerce.product_name } output << { date: current_time.to_date.strftime("%Y-%m-%d"), line: ::Faker::Number.between(from: 0, to: 25_000), entry: "#{log_prefix(current_time)} #{formatted_entry}" } end output end def self.generate_death_log # Set up the time starting_time = ::Faker::Time.backward(days: ::Faker::Number.between(from: 1, to: 14), period: :morning) starting_time = starting_time.in_time_zone(TIMEZONES.sample) end_time = starting_time.end_of_day output = [] ::Faker::Number.between(from: 1, to: 250).times do current_time = ::Faker::Time.between(from: starting_time, to: end_time) formatted_entry = Format::DEATH % { player_name: ::Faker::Name.name, reason: ::Faker::Lorem.sentence } output << { date: current_time.to_date.strftime("%Y-%m-%d"), line: ::Faker::Number.between(from: 0, to: 25_000), entry: "#{log_prefix(current_time)} #{formatted_entry}" } end output end def self.generate_territory_log # Set up the time starting_time = ::Faker::Time.backward(days: ::Faker::Number.between(from: 1, to: 14), period: :morning) starting_time = starting_time.in_time_zone(TIMEZONES.sample) end_time = starting_time.end_of_day output = [] ::Faker::Number.between(from: 1, to: 250).times do current_format = Format::TERRITORY.sample current_time = ::Faker::Time.between(from: starting_time, to: end_time) formatted_entry = current_format % { player_uid: ::Faker::Number.number(digits: 17).to_s, player_name: ::Faker::Name.name, number: ::Faker::Number.between(from: 1, to: 1_000_000) } output << { date: current_time.to_date.strftime("%Y-%m-%d"), line: ::Faker::Number.between(from: 0, to: 25_000), entry: "#{log_prefix(current_time)} #{formatted_entry}" } end output end private_class_method def self.log_prefix(date) "[#{date.strftime("%H:%M:%S:%6N %:z")}] [Thread #{::Faker::Number.between(from: 1000, to: 99_999)}]" end end