use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::entry::ID;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UserInfo {
pub username: String,
pub user_database_id: ID,
pub password_hash: Option<String>,
pub password_salt: Option<String>,
pub created_at: i64,
pub status: UserStatus,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum UserStatus {
Active,
Disabled,
Locked,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UserProfile {
pub username: String,
pub display_name: Option<String>,
pub contact_info: Option<String>,
pub preferences: UserPreferences,
}
#[derive(Clone, Debug, Serialize, Deserialize, Default)]
pub struct UserPreferences {
pub default_sync_enabled: bool,
pub properties: HashMap<String, String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "lowercase")]
pub enum KeyEncryption {
Encrypted {
nonce: Vec<u8>,
},
Unencrypted,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UserKey {
pub key_id: String,
pub private_key_bytes: Vec<u8>,
pub encryption: KeyEncryption,
pub display_name: Option<String>,
pub created_at: i64,
pub last_used: Option<i64>,
pub is_default: bool,
pub database_sigkeys: HashMap<ID, String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UserDatabasePreferences {
pub database_id: ID,
pub key_id: String,
pub sync_settings: SyncSettings,
pub added_at: i64,
}
#[derive(Clone, Debug, Serialize, Deserialize, Default)]
pub struct SyncSettings {
pub sync_enabled: bool,
pub sync_on_commit: bool,
pub interval_seconds: Option<u64>,
pub properties: HashMap<String, String>,
}
#[derive(Clone, Debug)]
pub struct DatabasePreferences {
pub database_id: ID,
pub key_id: String,
pub sync_settings: SyncSettings,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DatabaseTracking {
pub database_id: ID,
pub name: Option<String>,
pub users: Vec<String>,
pub created_at: i64,
pub last_modified: i64,
pub metadata: HashMap<String, String>,
}
#[derive(Clone, Debug)]
pub enum DatabaseTrackingUpdate {
AddUser(String),
RemoveUser(String),
UpdateMetadata(HashMap<String, String>),
}
#[derive(Clone, Debug)]
pub enum DatabasePreferenceUpdate {
EnableSync(bool),
SetSyncSettings(SyncSettings),
SetPreferredSigKey(String),
UpdateNotes(String),
}