// Copyright 2026 TiKV Project Authors. Licensed under Apache-2.0.

use online_config::{ConfigChange, ConfigManager, ConfigValue};
use slog_global::info;

use crate::RfEngine;

/// Applies the online rfengine configuration supported by the running engine.
pub struct RfEngineConfigManager {
    engine: RfEngine,
}

impl RfEngineConfigManager {
    /// Creates a config manager for `engine`.
    pub fn new(engine: RfEngine) -> Self {
        Self { engine }
    }
}

impl ConfigManager for RfEngineConfigManager {
    fn dispatch(&mut self, change: ConfigChange) -> online_config::Result<()> {
        let Some(ConfigValue::Bool(enabled)) = change.get("lightweight_backup") else {
            return Ok(());
        };
        futures::executor::block_on(self.engine.set_lightweight_backup_enabled(*enabled))?;
        info!(
            "rfengine online config changed";
            "lightweight_backup" => enabled,
        );
        Ok(())
    }
}
