// 数据库迁移：添加 password_hash 字段到 users 表
const db = require('../db-sqlite');
const { hashPassword } = require('../utils/auth');

async function migrate() {
  try {
    console.log('开始迁移：添加 password_hash 字段...');
    
    // 检查 password_hash 字段是否已存在
    const result = await db.query("PRAGMA table_info(users)");
    const hasPasswordHash = result.rows.some(row => row.name === 'password_hash');
    
    if (hasPasswordHash) {
      console.log('✅ password_hash 字段已存在，跳过迁移');
      return;
    }
    
    // 添加 password_hash 字段
    await db.query("ALTER TABLE users ADD COLUMN password_hash TEXT");
    console.log('✅ password_hash 字段添加成功');
    
    // 获取所有用户，为现有用户设置默认密码哈希
    // 注意：这会使用密码 '123456' 为所有用户生成哈希
    // 首次登录后需要提示用户修改密码
    const defaultPassword = '123456';
    const defaultHash = hashPassword(defaultPassword);
    
    // 更新所有现有用户，将 plaintext password 迁移到 password_hash
    const usersResult = await db.query("SELECT id, password FROM users WHERE password_hash IS NULL");
    console.log(`找到 ${usersResult.rows.length} 个需要迁移的用户`);
    
    for (const user of usersResult.rows) {
      // 如果已有明文密码，使用相同的密码生成哈希
      // 如果没有明文密码，使用默认密码
      const passwordToHash = user.password || defaultPassword;
      const hashedPassword = hashPassword(passwordToHash);
      
      await db.query(
        "UPDATE users SET password_hash = ? WHERE id = ?",
        [hashedPassword, user.id]
      );
      console.log(`  用户 ID ${user.id} 密码已迁移`);
    }
    
    console.log('✅ 密码迁移完成');
    console.log('');
    console.log('⚠️ 重要提示：');
    console.log('  - 现有用户密码已迁移（或使用默认密码 123456）');
    console.log('  - 建议通知所有用户首次登录后修改密码');
    console.log('  - 新注册用户的密码将自动使用哈希存储');
    
  } catch (error) {
    console.error('❌ 迁移失败:', error.message);
    process.exit(1);
  }
}

// 如果是直接运行此脚本
if (require.main === module) {
  migrate().then(() => {
    console.log('\n迁移完成');
    process.exit(0);
  });
}

module.exports = { migrate };
