#ifndef SCHEDULE_MANAGER_H #define SCHEDULE_MANAGER_H #include #include #include #include #include #include #include // 日程事件结构 struct ScheduleEvent { std::string id; // 唯一标识符 std::string title; // 事件标题 std::string description; // 事件描述 std::string category; // 事件分类(工作、生活、学习等) time_t start_time; // 开始时间 time_t end_time; // 结束时间 bool is_all_day; // 是否全天事件 bool is_recurring; // 是否重复事件 std::string recurrence; // 重复规则(daily, weekly, monthly) int reminder_minutes; // 提醒时间(分钟) bool is_completed; // 是否已完成 time_t created_time; // 创建时间 time_t updated_time; // 更新时间 ScheduleEvent() : start_time(0), end_time(0), is_all_day(false), is_recurring(false), reminder_minutes(0), is_completed(false), created_time(0), updated_time(0) {} }; // 智能分类枚举 enum class EventCategory { WORK, // 工作 LIFE, // 生活 STUDY, // 学习 HEALTH, // 健康 ENTERTAINMENT, // 娱乐 TRAVEL, // 旅行 FAMILY, // 家庭 OTHER // 其他 }; // 提醒回调函数类型 using ReminderCallback = std::function; class ScheduleManager { public: static ScheduleManager& GetInstance() { static ScheduleManager instance; return instance; } // 事件管理 std::string CreateEvent(const std::string& title, const std::string& description, time_t start_time, time_t end_time, const std::string& category = "", bool is_all_day = false, int reminder_minutes = 15); bool UpdateEvent(const std::string& event_id, const std::string& title = "", const std::string& description = "", time_t start_time = 0, time_t end_time = 0, const std::string& category = "", bool is_all_day = false, int reminder_minutes = -1); bool DeleteEvent(const std::string& event_id); ScheduleEvent* GetEvent(const std::string& event_id); // 查询功能 std::vector GetEventsByDate(time_t date); std::vector GetEventsByCategory(const std::string& category); std::vector GetUpcomingEvents(int days = 7); std::vector GetEventsByKeyword(const std::string& keyword); // 智能分类 std::string CategorizeEvent(const std::string& title, const std::string& description); // 提醒功能 void SetReminderCallback(ReminderCallback callback); void CheckReminders(); // 统计功能 int GetEventCount(); int GetEventCountByCategory(const std::string& category); std::map GetCategoryStatistics(); // 数据持久化 bool SaveToStorage(); bool LoadFromStorage(); // 导出功能 std::string ExportToJson(); bool ImportFromJson(const std::string& json_data); private: ScheduleManager(); ~ScheduleManager(); std::string GenerateEventId(); std::string CategoryToString(EventCategory category); EventCategory StringToCategory(const std::string& category_str); bool IsEventTimeValid(time_t start_time, time_t end_time); void UpdateEventTimestamp(ScheduleEvent& event); std::map events_; std::mutex events_mutex_; ReminderCallback reminder_callback_; static const char* TAG; }; #endif // SCHEDULE_MANAGER_H