pub struct ChunkStat {
    pub size: u64,
    pub compressed_size: u64,
    pub disk_size: u64,

    pub chunk_count: usize,
    pub duplicate_chunks: usize,

    start_time: std::time::SystemTime,
}

impl ChunkStat {

    pub fn new(size: u64) -> Self {
        ChunkStat {
            size,
            compressed_size: 0,
            disk_size: 0,

            chunk_count: 0,
            duplicate_chunks: 0,

            start_time: std::time::SystemTime::now(),
        }
    }
}

impl std::fmt::Debug for ChunkStat {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        let avg = ((self.size as f64)/(self.chunk_count as f64)) as usize;
        let compression = (self.compressed_size*100)/(self.size as u64);
        let rate = (self.disk_size*100)/(self.size as u64);

        let elapsed = self.start_time.elapsed().unwrap();
        let elapsed = (elapsed.as_secs() as f64) +
            (elapsed.subsec_millis() as f64)/1000.0;

        let write_speed = ((self.size as f64)/(1024.0*1024.0))/elapsed;

        write!(f, "Size: {}, average chunk size: {}, compression rate: {}%, disk_size: {} ({}%), speed: {:.2} MB/s",
               self.size, avg, compression, self.disk_size, rate, write_speed)
    }
}
