use rand_core::CryptoRngCore;
use serde::{Deserialize, Serialize};
use crate::evm::EvmAddress;
use crate::keys::{PrivateKey, Secret};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivacyOptions {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fresh_recipient: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub relay_claim: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub standard_amounts_only: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub jitter_ms: Option<u64>,
}
pub const STANDARD_AMOUNTS_ZAT: [u64; 4] = [10_000_000, 50_000_000, 100_000_000, 500_000_000];
pub fn is_standard_amount(zat: u64) -> bool {
STANDARD_AMOUNTS_ZAT.contains(&zat)
}
pub fn new_secret<R: CryptoRngCore + ?Sized>(rng: &mut R) -> (Secret, [u8; 32]) {
let secret = Secret::random(rng);
let hashlock = secret.hashlock();
(secret, hashlock)
}
pub fn fresh_evm_account<R: CryptoRngCore + ?Sized>(rng: &mut R) -> (EvmAddress, PrivateKey) {
let key = PrivateKey::random(rng);
(EvmAddress::from_public_key(&key.public_key()), key)
}