use std::collections::HashMap;

use serde::{Serialize, Deserialize};
use utoipa::{ToSchema, IntoParams};

#[derive(Serialize, Deserialize, ToSchema, Debug, IntoParams)]
pub struct AuthParams {
    pub token: Option<String>,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct FullViewData {
    pub games: HashMap<i32, ChellarisGame>,
    pub ethics: HashMap<i32, Ethic>,
    pub species: HashMap<i32, Species>,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct ChellarisGame {
    pub id: i32,
    pub name: String,
    pub groups: HashMap<i32, ChellarisGameGroup>,
    pub empires: HashMap<i32, ChellarisEmpire>,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct ChellarisGameGroup {
    pub id: i32,
    pub name: String,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct ChellarisEmpire {
    pub id: i32,
    pub gestalt: bool,
    pub machine: bool,
    pub group: i32,
    pub empire_portrait: i32,
    pub empire_portrait_group: i32,
    pub discord_user: Option<String>,
    pub ethics: HashMap<i32, EmpireEthic>,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct Ethic {
    pub id: i32,
    pub displayName: String,
    pub machine: bool,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct EmpireEthic {
    pub id: i32,
    pub displayName: String,
    pub machine: bool,
    pub fanatic: bool,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct Species {
    pub id: i32,
    pub displayName: String,
    pub portraits: HashMap<i32, Portrait>,
}

#[derive(Serialize, ToSchema, Debug, Clone)]
pub struct Portrait {
    pub id: i32,
    pub hires: String,
    pub lores: Option<String>,
}