#pragma once
//robotics
#include <robotics/mvc.hpp>
#include <robotics/logger.hpp>
//local
#include "../xml/xml_context.hpp"
#include "../response/response.hpp"
#include "../models/web_message_info.h"
#include "../models/web_response_info.h"

using namespace robotics;
using WebResponse		= robotics::v3::mvc::web_result_response;
using HttpContext		= robotics::v3::mvc::http_context::curr;
using JumpResponse		= robotics::v3::mvc::jump_response;
using TextResponse		= robotics::v3::mvc::text_response;
using JsonResponse		= robotics::v3::mvc::json_response;
using StreamResponse	= robotics::v3::mvc::stream_response;
using DownloadResponse	= robotics::v3::mvc::download_response;
using HtmlResponse		= robotics::v3::mvc::html_response;
using View				= robotics::v3::mvc::view;

/* ************************************************
* 作者:Lenovo
* 时间:2024/5/24 11:04:02
* 机器名:DESKTOP-4I13MDL
* 控制器名:sync
* *************************************************/
class sync {
public:
	sync() {}
	/**
	 * @brief 处理对“/sync/index”路径的请求，并返回对应的视图页面。
	 * @return 返回与“sync/index.html”文件映射的WebResponse视图。
	 */
	[[Route("sync/index")]]
	[[FileMapping("sync/index.html")]]
	WebResponse index() {
		return View();
	}
	/**
	 * @brief 根据指定的筛选条件和分页参数，加载同步配置信息列表。
	 * @param page 要加载的页码，从1开始。
	 * @param limit 每页返回的数据条数。
	 * @param type 用于筛选的类型（字符串表示，若为空则不筛选）。
	 * @param enable 用于筛选的启用状态（"true"或"false"，若为空则不筛选）。
	 * @param begin_time 筛选的起始创建时间（字符串格式）。
	 * @param end_time 筛选的结束创建时间（字符串格式）。
	 * @return 包含筛选后同步配置信息列表及总数的WebResponse对象，结果以JSON格式返回。
	 */
	[[Route("sync/load")]]
	WebResponse load(int page, int limit,
		std::string type,
		std::string enable,
		std::string start_time,
		std::string end_time) {
		web_response_info<web_sync_config_info> result;
		result.data = xml_context::from<web_sync_config_info>().
			size(result.count).
			where([type, enable, start_time, end_time](auto it)
				{
					return (type.empty() || std::atoi(type.c_str()) == it->express_type) &&
						(enable.empty() || (enable == "true") == it->enable) &&
						v3::datetime(start_time) <= it->create_time &&
						v3::datetime(end_time) >= it->create_time;
				}).
			limit(page, limit);
		return JsonResponse(result);
	}
};