use std::sync::OnceLock;
use chrono::{DateTime, Utc};
pub type DeliveryHook = fn(&str, Option<(&str, DateTime<Utc>)>, usize, bool);
pub type SessionEndHook = fn(&str, &str);
#[derive(Clone, Copy)]
pub struct KnowledgeHooks {
pub record_delivery: DeliveryHook,
pub session_ended: SessionEndHook,
}
static HOOKS: OnceLock<KnowledgeHooks> = OnceLock::new();
pub fn register_knowledge_hooks(hooks: KnowledgeHooks) {
let _ = HOOKS.set(hooks);
}
pub fn record_delivery(
project_root: &str,
session: Option<(&str, DateTime<Utc>)>,
hive_facts: usize,
asked: bool,
) {
if let Some(hooks) = HOOKS.get() {
(hooks.record_delivery)(project_root, session, hive_facts, asked);
}
}
pub fn session_ended(project_root: &str, session_id: &str) {
if let Some(hooks) = HOOKS.get() {
(hooks.session_ended)(project_root, session_id);
}
}