use std::collections::BTreeSet;
use nostr::{PublicKey, RelayUrl};
use openmls::group::GroupId;
pub mod error;
pub mod types;
use self::error::GroupError;
use self::types::*;
use crate::messages::types::Message;
pub trait GroupStorage {
fn all_groups(&self) -> Result<Vec<Group>, GroupError>;
fn find_group_by_mls_group_id(&self, group_id: &GroupId) -> Result<Option<Group>, GroupError>;
fn find_group_by_nostr_group_id(
&self,
nostr_group_id: &[u8; 32],
) -> Result<Option<Group>, GroupError>;
fn save_group(&self, group: Group) -> Result<(), GroupError>;
fn messages(&self, group_id: &GroupId) -> Result<Vec<Message>, GroupError>;
fn admins(&self, group_id: &GroupId) -> Result<BTreeSet<PublicKey>, GroupError>;
fn group_relays(&self, group_id: &GroupId) -> Result<BTreeSet<GroupRelay>, GroupError>;
fn replace_group_relays(
&self,
group_id: &GroupId,
relays: BTreeSet<RelayUrl>,
) -> Result<(), GroupError>;
fn get_group_exporter_secret(
&self,
group_id: &GroupId,
epoch: u64,
) -> Result<Option<GroupExporterSecret>, GroupError>;
fn save_group_exporter_secret(
&self,
group_exporter_secret: GroupExporterSecret,
) -> Result<(), GroupError>;
}