use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HITLApprovalRequest {
pub request_id: String,
pub org_id: String,
pub tenant_id: String,
pub client_id: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub user_id: Option<String>,
pub original_query: String,
pub request_type: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub request_context: Option<HashMap<String, serde_json::Value>>,
pub triggered_policy_id: String,
pub triggered_policy_name: String,
pub trigger_reason: String,
pub severity: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub eu_ai_act_article: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub compliance_framework: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub risk_classification: Option<String>,
pub status: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub reviewer_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub reviewer_email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub review_comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub reviewed_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub notify_url: Option<String>,
pub expires_at: String,
pub created_at: String,
pub updated_at: String,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct HITLQueueListOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HITLQueueListResponse {
pub items: Vec<HITLApprovalRequest>,
pub total: i64,
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize)]
pub struct HITLReviewInput {
pub reviewer_id: String,
pub reviewer_email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reviewer_role: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct HITLCreateInput {
pub client_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
pub original_query: String,
pub request_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_context: Option<HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub triggered_policy_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub triggered_policy_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notify_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eu_ai_act_article: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compliance_framework: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub risk_classification: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_in_seconds: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HITLStats {
pub total_pending: i64,
pub high_priority: i64,
pub critical_priority: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub oldest_pending_hours: Option<f64>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct HitlListEnvelope {
#[serde(default)]
pub data: Vec<HITLApprovalRequest>,
#[serde(default)]
pub meta: HitlListMeta,
}
#[derive(Debug, Default, Deserialize)]
pub(crate) struct HitlListMeta {
#[serde(default)]
pub total: i64,
#[serde(default)]
#[allow(dead_code)]
pub limit: i64,
#[serde(default)]
pub offset: i64,
}
#[derive(Debug, Deserialize)]
pub(crate) struct HitlItemEnvelope {
pub data: HITLApprovalRequest,
}
#[derive(Debug, Deserialize)]
pub(crate) struct HitlStatsEnvelope {
pub data: HITLStats,
}