use crate::{AIDecision, ai_validate_async};
use serde::{Deserialize, Serialize};
use serde_json::json;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RigValidationResult {
pub valid: bool,
pub username: Option<String>,
pub confidence: u8,
pub status: String,
pub action: String,
}
pub async fn rig_validate(url: &str) -> RigValidationResult {
let result = ai_validate_async(url).await;
let confidence = (result.confidence * 100.0) as u8;
let (status, action) = match (&result.decision, result.is_valid, result.confidence) {
(AIDecision::Accept, true, conf) if conf >= 0.9 => (
"✅ Verified LinkedIn profile".to_string(),
"Use this profile with high confidence".to_string(),
),
(AIDecision::Accept, true, _) => (
"✅ Valid LinkedIn profile (auth required)".to_string(),
"Accept this profile - LinkedIn is blocking verification but URL is valid".to_string(),
),
(AIDecision::Retry, _, _) => (
"⏳ Network issue - retry needed".to_string(),
"Wait a moment and try validating again".to_string(),
),
(AIDecision::Reject, false, _) if result.metadata.domain_verified => (
"❌ Not a LinkedIn profile URL".to_string(),
"This is LinkedIn but not a profile - might be company page".to_string(),
),
(AIDecision::Reject, false, _) => (
"❌ Invalid LinkedIn URL".to_string(),
"Search for a different LinkedIn profile URL".to_string(),
),
_ => (
"❓ Unknown status".to_string(),
"Review the URL manually".to_string(),
),
};
RigValidationResult {
valid: result.is_valid,
username: result.username,
confidence,
status,
action,
}
}
pub async fn rig_is_valid(url: &str) -> bool {
rig_validate(url).await.valid
}
pub async fn rig_validate_text(url: &str) -> String {
let result = rig_validate(url).await;
if result.valid {
if let Some(username) = result.username {
format!(
"{} @{} ({}% confidence)",
result.status, username, result.confidence
)
} else {
format!("{} ({}% confidence)", result.status, result.confidence)
}
} else {
format!("{} - {}", result.status, result.action)
}
}
pub async fn rig_validate_json(url: &str) -> String {
let result = rig_validate(url).await;
serde_json::to_string_pretty(&result).unwrap_or_else(|_| {
json!({
"valid": false,
"status": "Error processing request",
"action": "Try again later"
})
.to_string()
})
}