Documentation
use serde::{Deserialize, Serialize};

pub const DEFAULT_CONFIG: &[u8] = include_bytes!("../../default_config/default_login_conf.toml");

#[derive(Deserialize, Serialize, Debug, Default)]
pub struct LoginConfig {
    pub default_protocol: Protocol,
    #[serde(default = "true_bool")]
    pub auto_reconnect: bool,
    #[serde(rename = "client")]
    pub clients: Vec<ClientConfig>,
}

#[derive(Deserialize, Serialize, Debug)]
pub struct ClientConfig {
    pub account: i64,
    pub password: Option<String>,
    pub protocol: Option<Protocol>,
    #[serde(default = "true_bool")]
    pub auto_login: bool,
}

#[derive(Deserialize, Serialize, Debug, Clone, Copy, Default)]
pub enum Protocol {
    #[default]
    IPAD,
    AndroidPhone,
    AndroidWatch,
    MacOS,
    QiDian,
}

impl Protocol {
    pub fn as_rq_protocol(&self) -> ricq::version::Protocol {
        use ricq::version::Protocol;
        match self {
            Self::IPAD => Protocol::IPad,
            Self::AndroidPhone => Protocol::AndroidPhone,
            Self::AndroidWatch => Protocol::AndroidWatch,
            Self::MacOS => Protocol::MacOS,
            Self::QiDian => Protocol::QiDian,
        }
    }

    pub fn as_version(&self) -> ricq::version::Version {
        ricq::version::get_version(self.as_rq_protocol())
    }
}

fn true_bool() -> bool {
    true
}