/**
 * 服务管理器
 * 统一管理所有服务实例
 * 
 * 注意：此文件主要用于统一导出服务，实际调度系统使用 middleware/schedule/
 */

const AIService = require('./ai_service');
const PlaAccountService = require('./pla_account_service');
// TaskScheduler 已废弃，实际使用 middleware/schedule/ 中的调度系统
// MQTTHandler 文件不存在，实际使用 middleware/mqtt/mqttManager.js
// JobService 已合并到 middleware/job/jobManager.js1

class ServiceManager {
  constructor(config = {}) {
    this.config = config;
    this.services = {};
    this.initialized = false;
    this.logger = config.logger || console;
  }

  /**
   * 初始化所有服务
   */
  async initialize() {
    if (this.initialized) {
      return;
    }

    this.logger.info('初始化服务管理器...');

    try {
      // 初始化AI服务
      if (this.config.ai?.enabled !== false) {
        this.services.ai = AIService.getInstance(this.config.ai);
        this.logger.info('✓ AI服务已初始化');
      }

      // 注意：任务调度器实际使用 middleware/schedule/ 中的 ScheduleManager
      // 注意：MQTT处理器实际使用 middleware/mqtt/mqttManager.js

      this.initialized = true;
      this.logger.info('服务管理器初始化完成');
    } catch (error) {
      this.logger.error('服务管理器初始化失败:', error);
      throw error;
    }
  }

  /**
   * 获取AI服务
   * @returns {AIService}
   */
  getAI() {
    return this.services.ai;
  }

  /**
   * 检查服务健康状态
   * @returns {Object}
   */
  getHealthStatus() {
    return {
      initialized: this.initialized,
      services: {
        ai: !!this.services.ai
      }
    };
  }

  /**
   * 关闭所有服务
   */
  async shutdown() {
    this.logger.info('关闭服务管理器...');

    try {
      this.initialized = false;
      this.logger.info('服务管理器已关闭');
    } catch (error) {
      this.logger.error('关闭服务管理器失败:', error);
      throw error;
    }
  }
}

// 导出单例
let instance = null;

module.exports = {
  /**
   * 获取服务管理器实例
   * @param {Object} config - 配置选项
   * @returns {ServiceManager}
   */
  getInstance(config) {
    if (!instance) {
      instance = new ServiceManager(config);
    }
    return instance;
  },

  /**
   * 创建新的服务管理器实例
   * @param {Object} config - 配置选项
   * @returns {ServiceManager}
   */
  createInstance(config) {
    return new ServiceManager(config);
  },

  // 导出各个服务类
  AIService,
  PlaAccountService
  // TaskScheduler 已废弃
  // MQTTHandler 文件不存在
  // JobService 已合并到 middleware/job/jobManager.js
};
