use std::collections::HashMap;
use bevy::prelude::*;
use serde::{Deserialize, Serialize};
use crate::data::{ConversationId, EntryId};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct VisitCount {
pub offered: u32,
pub displayed: u32,
}
#[derive(Resource, Debug, Default)]
pub struct Visits(pub HashMap<(ConversationId, EntryId), VisitCount>);
impl Visits {
pub fn count(&self, at: (ConversationId, EntryId)) -> VisitCount {
self.0.get(&at).copied().unwrap_or_default()
}
pub fn displayed(&self, at: (ConversationId, EntryId)) -> u32 {
self.count(at).displayed
}
pub fn offered(&self, at: (ConversationId, EntryId)) -> u32 {
self.count(at).offered
}
pub fn record_displayed(&mut self, at: (ConversationId, EntryId)) {
self.0.entry(at).or_default().displayed += 1;
}
pub fn record_offered(&mut self, at: (ConversationId, EntryId)) {
self.0.entry(at).or_default().offered += 1;
}
}