use std::path::PathBuf;
use std::sync::Arc;
use linesmith_plugin::PluginRegistry;
use crate::config::Config;
use crate::data_context::xdg::{resolve_subdir, XdgEnv, XdgScope};
use crate::plugins::build_engine;
use crate::segments::BUILT_IN_SEGMENT_IDS;
#[must_use]
pub fn xdg_segments_dir(env: &XdgEnv) -> Option<PathBuf> {
resolve_subdir(env, XdgScope::Config, "segments")
}
#[must_use]
pub fn load_plugins(
cfg: Option<&Config>,
xdg_env: &XdgEnv,
) -> Option<(PluginRegistry, Arc<rhai::Engine>)> {
let config_dirs: &[PathBuf] = cfg.map_or(&[], |c| c.plugin_dirs.as_slice());
let xdg_dir = xdg_segments_dir(xdg_env);
let xdg_present = xdg_dir.as_deref().is_some_and(|p| p.is_dir());
if config_dirs.is_empty() && !xdg_present {
return None;
}
let engine = build_engine();
let registry = PluginRegistry::load_with_xdg(
config_dirs,
xdg_dir.as_deref(),
&engine,
BUILT_IN_SEGMENT_IDS,
);
Some((registry, engine))
}