use soroban_sdk::{Address, BytesN, Env};
use super::error::AccountError;
use super::intent::{AuthResult, SignedIntent};
use super::types::{AccountCapabilities, GameAction, SessionKey, SessionScope};
pub trait CougrAccount {
fn address(&self) -> &Address;
fn capabilities(&self) -> AccountCapabilities;
fn authorize(&self, env: &Env, action: &GameAction) -> Result<(), AccountError>;
}
pub trait IntentAccount: CougrAccount {
fn authorize_intent(
&mut self,
env: &Env,
intent: &SignedIntent,
) -> Result<AuthResult, AccountError>;
}
pub trait SessionKeyProvider: CougrAccount {
fn create_session(
&mut self,
env: &Env,
scope: SessionScope,
) -> Result<SessionKey, AccountError>;
fn validate_session(&self, env: &Env, key: &SessionKey) -> Result<bool, AccountError>;
fn revoke_session(&mut self, env: &Env, key_id: &BytesN<32>) -> Result<(), AccountError>;
}