// 清除指定模块的缓存
function clearModuleCache() {
  const modulesToClear = Object.keys(require.cache).filter(key =>
    key.includes('HarmlessPlace') || key.includes('database') || key.includes('controller')
  );
  
  console.log('清除以下模块的缓存:', modulesToClear.length, '个模块');
  modulesToClear.forEach(key => {
    console.log('-', key);
    delete require.cache[key];
  });
}

// 模拟服务器启动过程
async function simulateServerStartup() {
  try {
    // 1. 首先清除模块缓存
    clearModuleCache();
    
    // 2. 记录加载顺序
    console.log('\n=== 开始模拟服务器启动过程 ===');
    
    // 3. 先加载数据库配置 - 注意这里使用正确的路径
    console.log('\n1. 加载数据库配置...');
    const sequelize = require('./config/database');
    console.log('数据库实例加载完成');
    console.log('sequelize的类型:', typeof sequelize);
    
    // 4. 测试数据库连接
    console.log('\n2. 测试数据库连接...');
    try {
      await sequelize.authenticate();
      console.log('数据库连接成功');
    } catch (error) {
      console.error('数据库连接失败:', error.message);
    }
    
    // 5. 加载HarmlessPlace模型
    console.log('\n3. 加载HarmlessPlace模型...');
    const HarmlessPlace = require('./models/HarmlessPlace');
    console.log('HarmlessPlace模型加载完成');
    console.log('HarmlessPlace的类型:', typeof HarmlessPlace);
    console.log('HarmlessPlace是否有findAndCountAll方法:', typeof HarmlessPlace.findAndCountAll !== 'undefined');
    if (HarmlessPlace.findAndCountAll) {
      console.log('findAndCountAll的类型:', typeof HarmlessPlace.findAndCountAll);
    }
    
    // 6. 尝试调用findAndCountAll方法
    console.log('\n4. 尝试调用findAndCountAll方法...');
    try {
      const result = await HarmlessPlace.findAndCountAll({
        limit: 10,
        offset: 0
      });
      console.log('findAndCountAll调用成功，结果:', result);
    } catch (error) {
      console.error('findAndCountAll调用失败:', error.message);
    }
    
    // 7. 加载控制器
    console.log('\n5. 加载HarmlessPlaceController控制器...');
    const harmlessPlaceController = require('./controllers/HarmlessPlaceController');
    console.log('控制器加载完成');
    
    // 8. 创建模拟的req和res对象
    const mockReq = {
      query: {
        page: 1,
        pageSize: 10
      }
    };
    
    const mockRes = {
      json: function(data) {
        console.log('res.json被调用:', data);
      },
      status: function(code) {
        console.log('res.status被调用:', code);
        return this;
      }
    };
    
    // 9. 尝试调用控制器的getList方法
    console.log('\n6. 尝试调用控制器的getList方法...');
    try {
      await harmlessPlaceController.getList(mockReq, mockRes);
      console.log('控制器getList方法调用成功');
    } catch (error) {
      console.error('控制器getList方法调用失败:', error.message);
      console.error('错误堆栈:', error.stack);
    }
    
    console.log('\n=== 服务器启动模拟完成 ===');
    
  } catch (error) {
    console.error('模拟服务器启动过程中发生错误:', error.message);
    console.error('错误堆栈:', error.stack);
  }
}

// 运行模拟
console.log('开始执行服务器启动模拟测试...');
simulateServerStartup().catch(err => console.error('测试过程中出错:', err));