use std::collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
use crate::connections::{AuthScope, Connection, ConnectionAuth, ConnectionKind};
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
pub struct ConnectionConfig {
#[serde(default)]
pub scopes: Vec<String>,
#[serde(default)]
pub secret_keys: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
pub struct TokenResponse {
pub access_token: String,
pub token_type: String,
pub expires_at: Option<chrono::DateTime<chrono::Utc>>,
pub scopes: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
pub struct OAuthCallbackResponse {
pub connected: bool,
pub scopes: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
pub struct OAuthCallbackRequest {
pub code: String,
pub state: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
pub struct CreateConnectionRequest {
pub name: String,
pub auth_scope: AuthScope,
pub auth: ConnectionAuth,
#[serde(default)]
pub secrets: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub oauth_client_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub oauth_client_secret: Option<String>,
#[serde(default)]
pub skill_content: Option<String>,
#[serde(default)]
pub kind: ConnectionKind,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
pub struct UpdateConnectionRequest {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub auth: Option<ConnectionAuth>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
#[serde(tag = "type")]
pub enum CreateConnectionResponse {
#[serde(rename = "oauth_redirect")]
OAuthRedirect {
connection_id: Uuid,
auth_url: String,
setup_url: String,
},
#[serde(rename = "connected")]
Connected { connection: Connection },
}