use serde::{Deserialize, Serialize};

use crate::inspect::smp::services::{SmpServiceConsumerHypothesis, SmpServiceTraceBranchStatus};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpInfrastructureAssetTraceReport {
    pub profile_family: String,
    #[serde(default)]
    pub placed_structure_collection_header_present: bool,
    #[serde(default)]
    pub placed_structure_record_triplet_count: usize,
    #[serde(default)]
    pub side_buffer_present: bool,
    #[serde(default)]
    pub side_buffer_decoded_embedded_name_row_count: usize,
    #[serde(default)]
    pub side_buffer_unique_name_pair_count: usize,
    #[serde(default)]
    pub bridge_like_name_pair_count: usize,
    #[serde(default)]
    pub tunnel_like_name_pair_count: usize,
    #[serde(default)]
    pub track_cap_like_name_pair_count: usize,
    #[serde(default)]
    pub triplet_alignment_overlap_count: usize,
    #[serde(default)]
    pub atlas_candidate_consumers: Vec<String>,
    #[serde(default)]
    pub known_owner_bridge_fields: Vec<String>,
    #[serde(default)]
    pub known_bridge_helpers: Vec<String>,
    #[serde(default)]
    pub next_owner_questions: Vec<String>,
    #[serde(default)]
    pub candidate_consumer_hypotheses: Vec<SmpServiceConsumerHypothesis>,
    #[serde(default)]
    pub branches: Vec<SmpServiceTraceBranchStatus>,
    #[serde(default)]
    pub notes: Vec<String>,
}
