const Framework = require('../framework/node-core-framework.js');
const frameworkConfig = require('../config/framework.config.js');

/**
 * 同步所有模型到数据库
 * 执行所有 model 的 sync() 操作
 */
async function syncAllModels() {
  try {
    console.log('开始同步所有模型到数据库...');
    
    // 初始化框架
    console.log('正在初始化框架...');
    const framework = await Framework.init(frameworkConfig);
    
    // 获取所有模型
    const models = Framework.getModels();
    
    if (!models) {
      console.error('无法获取模型列表');
      return;
    }
    
    console.log('找到以下模型:');
    Object.keys(models).forEach(modelName => {
      console.log(`- ${modelName}`);
    });
    
    // 同步所有模型
    const syncPromises = Object.keys(models).map(async (modelName) => {
      try {
        const model = models[modelName];
        console.log(`正在同步模型: ${modelName}`);
        
        // 执行同步
        await model.sync({ alter: true });
        console.log(`✅ ${modelName} 同步完成`);
        
        return { modelName, success: true };
      } catch (error) {
        console.error(`❌ ${modelName} 同步失败:`, error.message);
        return { modelName, success: false, error: error.message };
      }
    });
    
    // 等待所有同步操作完成
    const results = await Promise.all(syncPromises);
    
    // 统计结果
    const successCount = results.filter(r => r.success).length;
    const failCount = results.filter(r => !r.success).length;
    
    console.log('\n=== 同步结果统计 ===');
    console.log(`成功: ${successCount} 个模型`);
    console.log(`失败: ${failCount} 个模型`);
    
    if (failCount > 0) {
      console.log('\n失败的模型:');
      results.filter(r => !r.success).forEach(r => {
        console.log(`- ${r.modelName}: ${r.error}`);
      });
    }
    
    console.log('\n数据库同步操作完成！');
    
  } catch (error) {
    console.error('同步过程中发生错误:', error);
  }
}

// 执行同步
syncAllModels().then(() => {
  console.log('脚本执行完成');
  process.exit(0);
}).catch(error => {
  console.error('脚本执行失败:', error);
  process.exit(1);
});
