use crate::{
bucket::BucketMap,
key_range::KeyRange,
memtable::{MemTable, SkipMapValue},
};
use chrono::{DateTime, Utc};
use crossbeam_skiplist::SkipMap;
use std::sync::Arc;
use tokio::sync::RwLock;
pub type Key = Vec<u8>;
pub type Value = Vec<u8>;
pub type ValOffset = usize;
pub type CreatedAt = DateTime<Utc>;
pub type LastModified = DateTime<Utc>;
pub type IsTombStone = bool;
pub type FlushSignal = u8;
pub type NoBytesRead = usize;
pub type SkipMapEntries<K> = Arc<SkipMap<K, SkipMapValue<ValOffset>>>;
pub type FlushReceiver = async_broadcast::Receiver<FlushSignal>;
pub type BucketMapHandle = Arc<RwLock<BucketMap>>;
pub type KeyRangeHandle = Arc<KeyRange>;
pub type ImmutableMemTables<K> = Arc<SkipMap<K, Arc<MemTable<K>>>>;
pub type ImmutableMemTablesLockFree<K> = SkipMap<MemtableId, Arc<MemTable<K>>>;
pub type Bool = bool;
pub type MemtableId = Vec<u8>;
pub type MemtableFlushStream = std::collections::HashSet<MemtableId>;
pub type GCUpdatedEntries<K> = Arc<RwLock<SkipMap<K, SkipMapValue<ValOffset>>>>;
pub type VLogHead = usize;
pub type VLogTail = usize;
pub type ByteSerializedEntry = Vec<u8>;