use crate::error::Result;
use crate::wami::tenant::{Tenant, TenantId, TenantQuotas, TenantUsage};
use async_trait::async_trait;
#[async_trait]
pub trait TenantStore: Send + Sync {
async fn create_tenant(&mut self, tenant: Tenant) -> Result<Tenant>;
async fn get_tenant(&self, tenant_id: &TenantId) -> Result<Option<Tenant>>;
async fn update_tenant(&mut self, tenant: Tenant) -> Result<Tenant>;
async fn delete_tenant(&mut self, tenant_id: &TenantId) -> Result<()>;
async fn list_tenants(&self) -> Result<Vec<Tenant>>;
async fn list_child_tenants(&self, parent_id: &TenantId) -> Result<Vec<Tenant>>;
async fn get_ancestors(&self, tenant_id: &TenantId) -> Result<Vec<Tenant>>;
async fn get_descendants(&self, tenant_id: &TenantId) -> Result<Vec<TenantId>>;
async fn get_effective_quotas(&self, tenant_id: &TenantId) -> Result<TenantQuotas>;
async fn get_tenant_usage(&self, tenant_id: &TenantId) -> Result<TenantUsage>;
}