use std::sync::{atomic::AtomicUsize, Arc};

use aquatic_common::IndexMap;
use aquatic_udp_protocol::*;

#[derive(Clone)]
pub struct LoadTestState {
    pub info_hashes: Arc<[InfoHash]>,
    pub statistics: Arc<SharedStatistics>,
}

#[derive(Default)]
pub struct SharedStatistics {
    pub requests: AtomicUsize,
    pub response_peers: AtomicUsize,
    pub responses_connect: AtomicUsize,
    pub responses_announce: AtomicUsize,
    pub responses_scrape: AtomicUsize,
    pub responses_error: AtomicUsize,
}

pub struct Peer {
    pub announce_info_hash_index: usize,
    pub announce_info_hash: InfoHash,
    pub announce_port: Port,
    pub scrape_info_hash_indices: Box<[usize]>,
    pub socket_index: u8,
}

pub enum StatisticsMessage {
    ResponsesPerInfoHash(IndexMap<usize, u64>),
}