#![allow(dead_code, unused_imports)]
use crate::database::{ChatDatabase, Message, Session, Workspace};
use anyhow::Result;
use std::path::PathBuf;
pub fn get_csm_db_path() -> PathBuf {
dirs::data_local_dir()
.map(|p| p.join("csm").join("csm.db"))
.unwrap_or_else(|| PathBuf::from("csm.db"))
}
pub fn csm_db_exists() -> bool {
get_csm_db_path().exists()
}
pub fn open_csm_db() -> Result<ChatDatabase> {
let path = get_csm_db_path();
ChatDatabase::open(&path)
}
pub fn list_db_workspaces() -> Result<Vec<Workspace>> {
let db = open_csm_db()?;
db.list_workspaces()
}
pub fn get_db_workspace(id: &str) -> Result<Option<Workspace>> {
let db = open_csm_db()?;
db.get_workspace(id)
}
pub fn list_db_sessions(
workspace_id: Option<&str>,
provider: Option<&str>,
limit: usize,
) -> Result<Vec<Session>> {
let db = open_csm_db()?;
db.list_sessions(workspace_id, provider, limit)
}
pub fn get_db_session(id: &str) -> Result<Option<Session>> {
let db = open_csm_db()?;
db.get_session(id)
}
pub fn get_db_messages(session_id: &str) -> Result<Vec<Message>> {
let db = open_csm_db()?;
db.get_messages(session_id)
}
pub fn count_sessions_by_provider() -> Result<Vec<(String, i64)>> {
let db = open_csm_db()?;
db.count_sessions_by_provider()
}
pub fn search_db_sessions(query: &str, limit: usize) -> Result<Vec<Session>> {
let db = open_csm_db()?;
let sessions = db.list_sessions(None, None, 1000)?;
let query_lower = query.to_lowercase();
let filtered: Vec<Session> = sessions
.into_iter()
.filter(|s| s.title.to_lowercase().contains(&query_lower))
.take(limit)
.collect();
Ok(filtered)
}