// External support for callback.
// 1. Support block input for some plugins.
// -----------------------------------------------------------------------------

use super::*;

const EXT_SUPPORT_BLOCK_INPUT: &str = "block-input";

pub(super) fn ext_support_callback(
    id: &str,
    peer: &str,
    msg: &super::callback_msg::MsgToExtSupport,
) -> PluginReturn {
    match &msg.r#type as _ {
        EXT_SUPPORT_BLOCK_INPUT => {
            // let supported_plugins = [];
            // let supported = supported_plugins.contains(&id);
            let supported = true;
            if supported {
                if msg.data.len() != 1 {
                    return PluginReturn::new(
                        errno::ERR_CALLBACK_INVALID_ARGS,
                        "Invalid data length",
                    );
                }
                let block = msg.data[0] != 0;
                if crate::server::plugin_block_input(peer, block) == block {
                    PluginReturn::success()
                } else {
                    PluginReturn::new(errno::ERR_CALLBACK_FAILED, "")
                }
            } else {
                PluginReturn::new(
                    errno::ERR_CALLBACK_PLUGIN_ID,
                    &format!("This operation is not supported for plugin '{}', please contact NetExperts for support.", id),
                )
            }
        }
        _ => PluginReturn::new(
            errno::ERR_CALLBACK_TARGET_TYPE,
            &format!("Unknown target type '{}'", &msg.r#type),
        ),
    }
}
