use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ClaudeSettings {
#[serde(rename = "mcpServers", skip_serializing_if = "Option::is_none")]
pub mcp_servers: Option<HashMap<String, McpServerConfig>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hooks: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permissions: Option<Value>,
#[serde(flatten)]
pub other: HashMap<String, Value>,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct McpConfig {
#[serde(rename = "mcpServers")]
pub mcp_servers: HashMap<String, McpServerConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct McpServerConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub command: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub args: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub env: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub headers: Option<HashMap<String, Value>>,
#[serde(rename = "_agpm", skip_serializing_if = "Option::is_none")]
pub agpm_metadata: Option<AgpmMetadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct AgpmMetadata {
pub managed: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
pub installed_at: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub dependency_name: Option<String>,
}