#pragma once
//stl
#include <iostream>
//robotics
#include <robotics/timer.hpp>
#include <robotics/message_bus.hpp>
//local
#include "../xml/xml_update.hpp"
#include "../network/network.hpp"

using namespace robotics;
extern v3::message_bus g_message_bus;

class core {
public:
	/**
	 * @brief 初始化 core 类的事件绑定，包括定时器超时事件和消息总线的请求处理函数。
	 */
	core() {
		network_ = network::instance();
		g_message_bus.bind("cloud_alarm_request", &core::on_sync_alarm_request, this);
		g_message_bus.bind("cloud_brand_request", &core::on_sync_brand_request, this);
		g_message_bus.bind("cloud_device_request", &core::on_sync_device_request, this);
		g_message_bus.bind("cloud_fitting_request", &core::on_sync_fitting_request, this);
		g_message_bus.bind("cloud_general_request", &core::on_sync_general_request, this);
		g_message_bus.bind("cloud_spec_request", &core::on_sync_spec_request, this);
		g_message_bus.bind("cloud_level_request", &core::on_sync_level_request, this);

		network_->cloud_alarm_event.bind(&core::on_cloud_alarm_response, this);
		network_->cloud_brand_event.bind(&core::on_cloud_brand_response, this);
		network_->cloud_device_event.bind(&core::on_cloud_device_response, this);
		network_->cloud_fitting_event.bind(&core::on_cloud_fitting_response, this);
		network_->cloud_general_event.bind(&core::on_cloud_general_response, this);
		network_->cloud_spec_event.bind(&core::on_cloud_spec_response, this);
		network_->cloud_level_event.bind(&core::on_cloud_level_response, this);
	}
	/**
	 * @brief 析构函数，用于销毁 core 对象并在销毁前调用 stop() 方法。
	 */
	~core() {
		stop();
	}
	/**
	 * @brief 启动网络组件。
	 */
	void start() {
		network_->start();
	}
	/**
	 * @brief 停止计时器的运行。
	 */
	void stop() {
		network_->stop();
	}
private:
	/**
	 * @brief 处理同步警报请求并更新 XML 数据。
	 */
	void on_sync_alarm_request() {
		auto values = network_->sync_alarm_request();
		xml_update::update(values);
	}
	/**
	 * @brief 同步品牌请求并更新 XML 数据。
	 */
	void on_sync_brand_request() {
		auto values = network_->sync_brand_request();
		xml_update::update(values);
	}
	/**
	 * @brief 处理设备同步请求并更新 XML 数据。
	 */
	void on_sync_device_request() {
		auto values = network_->sync_device_request();
		xml_update::update(values);
	}
	/**
	 * @brief 处理同步拟合请求并更新 XML 数据。
	 */
	void on_sync_fitting_request() {
		auto values = network_->sync_fitting_request();
		xml_update::update(values);
	}
	/**
	 * @brief 根据给定的键发起同步请求，并使用返回的数据更新 XML。
	 * @param key 用于同步请求的键值。
	 */
	void on_sync_general_request(int key) {
		auto values = network_->sync_general_request(key);
		xml_update::update(values);
	}
	/**
	 * @brief 处理同步模型请求并更新 XML 数据。
	 */
	void on_sync_spec_request() {
		auto values = network_->sync_spec_request();
		xml_update::update(values);
	}
	/**
	 * @brief 处理同步级别请求并更新 XML 数据。
	 */
	void on_sync_level_request() {
		auto values = network_->sync_level_request();
		xml_update::update(values);
	}
private:
	/**
	 * @brief 处理云端报警响应并更新相关配置信息。
	 * @param values 包含报警配置信息的常量引用向量。
	 */
	void on_cloud_alarm_response(std::vector<web_alarm_config_info>const& values) {
		xml_update::update(values);
	}
	/**
	 * @brief 处理云品牌响应并更新配置信息。
	 * @param values 包含品牌配置信息的常量引用向量。
	 */
	void on_cloud_brand_response(std::vector<web_brand_config_info>const& values) {
		xml_update::update(values);
	}
	/**
	 * @brief 处理来自云端设备的响应，并更新设备配置信息。
	 * @param values 包含设备配置信息的常量引用向量。
	 */
	void on_cloud_device_response(std::vector<web_device_config_info>const& values) {
		xml_update::update(values);
	}
	/**
	 * @brief 处理云拟合响应并更新配置信息。
	 * @param values 包含 web_fitting_config_info 对象的常量引用向量，表示云拟合返回的配置信息。
	 */
	void on_cloud_fitting_response(std::vector<web_fitting_config_info>const& values) {
		xml_update::update(values);
	}
	/**
	 * @brief 处理云端通用响应并更新配置信息。
	 * @param values 包含 web_general_config_info 对象的常量引用向量，表示接收到的配置信息。
	 */
	void on_cloud_general_response(std::vector<web_general_config_info>const& values) {
		xml_update::update(values);
	}
	/**
	 * @brief 处理云端模型的响应并更新本地配置。
	 * @param values 包含 web_spec_config_info 对象的常量引用向量，表示从云端接收到的模型配置信息。
	 */
	void on_cloud_spec_response(std::vector<web_spec_config_info>const& values) {
		xml_update::update(values);
	}
	/**
	 * @brief 处理云端等级响应并更新本地配置。
	 * @param values 包含云端等级配置信息的常量引用向量。
	 */
	void on_cloud_level_response(std::vector<web_level_config_info>const& values) {
		xml_update::update(values);
	}
private:
	/**
	 * @brief 定义并初始化一个指向 network 类型的指针变量 network_，初始值为 nullptr。
	 */
	network*  network_ = nullptr;
};