use a11y_perception::{AXSnapshot, FocusSnapshot};
use chromiumoxide::Page;
pub async fn capture(
page: &Page,
label: impl Into<String>,
timestamp_ms: u64,
) -> crate::error::Result<AXSnapshot> {
let tree = super::extractor::extract_ax_tree(page).await?;
let mut focus: FocusSnapshot = crate::interaction::focus::capture_focus(page).await?;
focus.active_backend_node_id = crate::interaction::focus::capture_focus_backend_id(page).await;
focus.ax_node_id = focus
.active_backend_node_id
.and_then(|id| tree.node_by_backend_id(id).map(|node| node.node_id.clone()));
let url = page.url().await.ok().flatten().unwrap_or_default();
let document_title = page.get_title().await.ok().flatten().unwrap_or_default();
Ok(AXSnapshot::new(
label,
url,
document_title,
timestamp_ms,
tree,
focus,
))
}