use async_trait::async_trait;
use chrono::{DateTime, Utc};
use super::key_metadata::{KeyStatus, SigningKeyMetadata};
use crate::error::Error;
#[cfg(feature = "database")]
pub mod pg;
#[cfg(feature = "turso")]
pub mod turso;
#[cfg(feature = "surrealdb")]
pub mod surrealdb_impl;
#[async_trait]
pub trait KeyRotationStorage: Send + Sync {
async fn store_key(&self, key: &SigningKeyMetadata) -> Result<(), Error>;
async fn get_active_key(&self, service_name: &str)
-> Result<Option<SigningKeyMetadata>, Error>;
async fn get_key_by_kid(&self, kid: &str) -> Result<Option<SigningKeyMetadata>, Error>;
async fn get_verification_keys(
&self,
service_name: &str,
) -> Result<Vec<SigningKeyMetadata>, Error>;
async fn update_key_status(
&self,
kid: &str,
new_status: KeyStatus,
timestamp: DateTime<Utc>,
) -> Result<(), Error>;
async fn retire_expired_draining_keys(&self, now: DateTime<Utc>) -> Result<u64, Error>;
async fn initialize(&self) -> Result<(), Error>;
}