use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::models::common::JsonObject;
use crate::models::skyblock::member::{
Dungeons, MemberCurrencies, MemberLeveling, MiningCore, PetsData, PlayerData, SlayerData,
};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkyBlockProfile {
pub profile_id: String,
#[serde(default)]
pub cute_name: Option<String>,
#[serde(default)]
pub selected: bool,
#[serde(default)]
pub game_mode: Option<String>,
#[serde(default)]
pub members: HashMap<String, SkyBlockMember>,
#[serde(default)]
pub banking: Option<Banking>,
#[serde(default)]
pub community_upgrades: Option<Value>,
#[serde(flatten)]
pub extra: JsonObject,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Banking {
#[serde(default)]
pub balance: f64,
#[serde(default)]
pub transactions: Vec<Value>,
#[serde(flatten)]
pub extra: JsonObject,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SkyBlockMember {
#[serde(default)]
pub player_id: Option<String>,
#[serde(default)]
pub player_data: Option<PlayerData>,
#[serde(default)]
pub profile: Option<Value>,
#[serde(default)]
pub leveling: Option<MemberLeveling>,
#[serde(default)]
pub currencies: Option<MemberCurrencies>,
#[serde(default)]
pub inventory: Option<Value>,
#[serde(default)]
pub pets_data: Option<PetsData>,
#[serde(default)]
pub dungeons: Option<Dungeons>,
#[serde(default)]
pub slayer: Option<SlayerData>,
#[serde(default)]
pub mining_core: Option<MiningCore>,
#[serde(default)]
pub jacobs_contest: Option<Value>,
#[serde(flatten)]
pub extra: JsonObject,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct ProfileResponse {
pub profile: Option<SkyBlockProfile>,
}
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct ProfilesResponse {
#[serde(default)]
pub profiles: Option<Vec<SkyBlockProfile>>,
}