use std::collections::BTreeMap;
use std::sync::Arc;
use parking_lot::RwLock;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use fakecloud_core::multi_account::{AccountState, MultiAccountState};
pub const CLOUDTRAIL_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CloudTrailData {
#[serde(default)]
pub trails: BTreeMap<String, Value>,
#[serde(default)]
pub trail_logging: BTreeMap<String, bool>,
#[serde(default)]
pub trail_status: BTreeMap<String, Value>,
#[serde(default)]
pub event_selectors: BTreeMap<String, Value>,
#[serde(default)]
pub insight_selectors: BTreeMap<String, Value>,
#[serde(default)]
pub event_data_stores: BTreeMap<String, Value>,
#[serde(default)]
pub channels: BTreeMap<String, Value>,
#[serde(default)]
pub imports: BTreeMap<String, Value>,
#[serde(default)]
pub queries: BTreeMap<String, Value>,
#[serde(default)]
pub dashboards: BTreeMap<String, Value>,
#[serde(default)]
pub resource_policies: BTreeMap<String, String>,
#[serde(default)]
pub delegated_admins: BTreeMap<String, Value>,
#[serde(default)]
pub event_configurations: BTreeMap<String, Value>,
#[serde(default)]
pub tags: BTreeMap<String, BTreeMap<String, String>>,
}
impl AccountState for CloudTrailData {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedCloudTrailState = Arc<RwLock<MultiAccountState<CloudTrailData>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct CloudTrailSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<CloudTrailData>,
}