use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceFingerprint {
pub device_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub device_model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub os: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub os_version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub screen_resolution: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub browser: Option<String>,
#[serde(default)]
pub is_known_device: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub device_first_seen: Option<DateTime<Utc>>,
#[serde(default)]
pub device_trust_score: f64,
}
pub struct DeviceProfiles;
impl DeviceProfiles {
pub const MOBILE_DEVICES: &[(&str, &str)] = &[
("iPhone 15 Pro", "iOS"),
("iPhone 15", "iOS"),
("iPhone 14", "iOS"),
("iPhone 13", "iOS"),
("iPhone SE", "iOS"),
("Samsung Galaxy S24", "Android"),
("Samsung Galaxy S23", "Android"),
("Samsung Galaxy A54", "Android"),
("Google Pixel 8", "Android"),
("Google Pixel 7", "Android"),
("OnePlus 12", "Android"),
("Xiaomi 14", "Android"),
];
pub const DESKTOP_OS: &[(&str, &str)] = &[
("Windows Desktop", "Windows"),
("Windows Desktop", "Windows"),
("MacBook Pro", "macOS"),
("MacBook Air", "macOS"),
("iMac", "macOS"),
("Linux Desktop", "Linux"),
];
pub const BROWSERS: &[&str] = &[
"Chrome 123",
"Chrome 122",
"Safari 17",
"Firefox 124",
"Edge 123",
];
pub const MOBILE_RESOLUTIONS: &[&str] = &[
"2556x1179",
"2796x1290",
"2340x1080",
"2400x1080",
"1792x828",
];
pub const DESKTOP_RESOLUTIONS: &[&str] = &[
"1920x1080",
"2560x1440",
"3840x2160",
"1440x900",
"1680x1050",
];
}