use super::types::{StorageEstimate, WatchlistFile};
const MAX_BACKFILL_PER_ENTITY: u64 = 3000;
const AVG_BYTES_PER_ROW: u64 = 720;
const AVG_LIVE_TRADES_PER_WALLET_PER_DAY: u64 = 10;
const AVG_LIVE_TRADES_PER_MARKET_PER_DAY: u64 = 30;
const AVG_LIVE_TRADES_PER_TOKEN_PER_DAY: u64 = 15;
pub fn estimate_storage(watchlist: &WatchlistFile, ttl_days: u32) -> StorageEstimate {
let wallet_count = watchlist.wallets.len();
let market_count = watchlist.markets.len();
let token_count = watchlist.tokens.len();
let entity_count = (wallet_count + market_count + token_count) as u64;
let backfill_trades = entity_count * MAX_BACKFILL_PER_ENTITY;
let live_trades = wallet_count as u64 * AVG_LIVE_TRADES_PER_WALLET_PER_DAY * ttl_days as u64
+ market_count as u64 * AVG_LIVE_TRADES_PER_MARKET_PER_DAY * ttl_days as u64
+ token_count as u64 * AVG_LIVE_TRADES_PER_TOKEN_PER_DAY * ttl_days as u64;
let estimated_trades = backfill_trades + live_trades;
let estimated_size_mb =
(estimated_trades * AVG_BYTES_PER_ROW + 1024 * 1024 - 1) / (1024 * 1024);
StorageEstimate {
estimated_trades,
estimated_size_mb,
ttl_days,
wallet_count,
market_count,
token_count,
}
}