use crate::com::variant::Variant;
use crate::error::OaResult;
use crate::office::constants::PpUpdateOption;
use crate::shapes::inventory::SlideInventory;
pub fn update_charts(
inventory: &SlideInventory,
excel_path: &str,
skip_refresh: bool,
) -> OaResult<usize> {
if inventory.charts.is_empty() {
return Ok(0);
}
let mut updated = 0;
for chart_ref in &inventory.charts {
let mut shape = chart_ref.dispatch.clone();
let mut link_format = match shape.nav("LinkFormat") {
Ok(lf) => lf,
Err(_) => continue,
};
let current_source = link_format.get("SourceFullName")
.and_then(|v| v.as_string())
.unwrap_or_default();
if current_source == "NULL" || current_source.is_empty() {
continue;
}
if skip_refresh {
let _ = link_format.put("AutoUpdate", Variant::from(PpUpdateOption::Manual as i32));
updated += 1;
super::verbose::detail(chart_ref.slide_index, &chart_ref.name, "AutoUpdate=Manual (pre-updated)");
} else {
if let Err(e) = link_format.put("SourceFullName", Variant::from(excel_path)) {
eprintln!("Warning: failed to set chart SourceFullName for '{}': {e}", chart_ref.name);
continue;
}
if let Err(e) = link_format.call0("Update") {
eprintln!("Warning: failed to update chart data for '{}': {e}", chart_ref.name);
}
let _ = link_format.put("AutoUpdate", Variant::from(PpUpdateOption::Manual as i32));
updated += 1;
super::verbose::detail(chart_ref.slide_index, &chart_ref.name, "linked + refreshed");
}
}
Ok(updated)
}