use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSaveWorldSelectionContextProbe {
    pub profile_family: String,
    pub source_kind: String,
    pub semantic_family: String,
    pub chunk_tag_offset: usize,
    pub payload_offset: usize,
    pub payload_len: usize,
    pub payload_len_hex: String,
    pub selected_company_id_offset: usize,
    pub selected_company_id: u32,
    pub selected_company_id_hex: String,
    pub selected_chairman_profile_id_offset: usize,
    pub selected_chairman_profile_id: u32,
    pub selected_chairman_profile_id_hex: String,
    pub chairman_slot_selector_offset: usize,
    pub chairman_slot_selectors: Vec<u8>,
    pub campaign_override_flag_offset: usize,
    pub campaign_override_flag: u8,
    pub campaign_override_flag_hex: String,
    pub chairman_role_gate_offset: usize,
    pub chairman_role_gate_bytes: Vec<u8>,
    pub evidence: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSaveWorldSelectionRoleAnalysisEntry {
    pub slot_index: usize,
    pub selector_byte: u8,
    pub selector_byte_hex: String,
    pub role_gate_byte: u8,
    pub role_gate_byte_hex: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpSaveWorldSelectionRoleAnalysis {
    pub selected_company_id: u32,
    pub selected_chairman_profile_id: u32,
    pub campaign_override_flag: u8,
    pub campaign_override_flag_hex: String,
    pub chairman_slots: Vec<SmpSaveWorldSelectionRoleAnalysisEntry>,
}
