use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SoapRequest {
    pub headers: BTreeMap<String, String>,
    pub body: Value,
    pub timeout_ms: u64,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct SoapResponse {
    pub status_code: u16,
    pub headers: BTreeMap<String, String>,
    pub body: Value,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SoapOperationSummary {
    pub operation_name: String,
    pub soap_action: Option<String>,
    pub binding_style: String,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SoapPortSummary {
    pub port_name: String,
    pub binding_name: String,
    pub endpoint: Option<String>,
    pub soap_version: String,
    pub operations: Vec<SoapOperationSummary>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SoapServiceSummary {
    pub service_name: String,
    pub ports: Vec<SoapPortSummary>,
}
