/**
 * 数据库初始化脚本
 * @file init-db.js
 * @description 初始化银行系统数据库
 */
const { sequelize } = require('../config/database');
const { User, Role, Account, Transaction } = require('../models');
const bcrypt = require('bcryptjs');

async function initDatabase() {
  try {
    console.log('🔄 开始初始化银行系统数据库...');
    
    // 测试数据库连接
    await sequelize.authenticate();
    console.log('✅ 数据库连接成功');
    
    // 同步数据库模型
    await sequelize.sync({ force: true });
    console.log('✅ 数据库表创建成功');
    
    // 创建初始角色
    console.log('🔄 创建初始角色...');
    const roles = await Role.bulkCreate([
      {
        name: 'admin',
        display_name: '系统管理员',
        description: '拥有系统所有权限',
        level: 100,
        is_system: true
      },
      {
        name: 'manager',
        display_name: '银行经理',
        description: '拥有银行管理权限',
        level: 80,
        is_system: false
      },
      {
        name: 'teller',
        display_name: '银行柜员',
        description: '拥有基本业务操作权限',
        level: 60,
        is_system: false
      },
      {
        name: 'user',
        display_name: '普通用户',
        description: '拥有基本用户权限',
        level: 20,
        is_system: false
      }
    ]);
    console.log('✅ 初始角色创建成功');
    
    // 创建初始管理员用户
    console.log('🔄 创建初始管理员用户...');
    const adminUser = await User.create({
      username: 'admin',
      email: 'admin@bank.com',
      password: 'Admin123456',
      phone: '13800138000',
      real_name: '系统管理员',
      id_card: '110101199001011234',
      role_id: roles[0].id, // admin角色
      status: 'active'
    });
    console.log('✅ 初始管理员用户创建成功');
    
    // 创建测试用户
    console.log('🔄 创建测试用户...');
    const testUser = await User.create({
      username: 'testuser',
      email: 'test@bank.com',
      password: 'Test123456',
      phone: '13800138001',
      real_name: '测试用户',
      id_card: '110101199001011235',
      role_id: roles[3].id, // user角色
      status: 'active'
    });
    console.log('✅ 测试用户创建成功');
    
    // 为测试用户创建账户
    console.log('🔄 为测试用户创建账户...');
    const testAccount = await Account.create({
      account_number: '001' + Date.now().toString().slice(-8) + '0001',
      user_id: testUser.id,
      account_type: 'savings',
      balance: 100000, // 1000元
      available_balance: 100000,
      frozen_amount: 0,
      currency: 'CNY',
      interest_rate: 0.035, // 3.5%年利率
      status: 'active'
    });
    console.log('✅ 测试账户创建成功');
    
    // 创建一些示例交易记录
    console.log('🔄 创建示例交易记录...');
    const transactions = await Transaction.bulkCreate([
      {
        transaction_number: 'TXN' + Date.now() + '0001',
        account_id: testAccount.id,
        transaction_type: 'deposit',
        amount: 100000,
        balance_before: 0,
        balance_after: 100000,
        description: '开户存款',
        status: 'completed',
        processed_at: new Date()
      },
      {
        transaction_number: 'TXN' + Date.now() + '0002',
        account_id: testAccount.id,
        transaction_type: 'interest',
        amount: 292, // 约1元利息
        balance_before: 100000,
        balance_after: 100292,
        description: '定期利息',
        status: 'completed',
        processed_at: new Date()
      }
    ]);
    console.log('✅ 示例交易记录创建成功');
    
    console.log('\n🎉 银行系统数据库初始化完成！');
    console.log('\n📋 初始数据信息：');
    console.log(`👤 管理员账户: admin / Admin123456`);
    console.log(`👤 测试用户: testuser / Test123456`);
    console.log(`🏦 测试账户: ${testAccount.account_number}`);
    console.log(`💰 初始余额: ${(testAccount.balance / 100).toFixed(2)} 元`);
    console.log('\n🔗 数据库连接信息：');
    console.log(`   主机: ${process.env.DB_HOST || 'localhost'}`);
    console.log(`   端口: ${process.env.DB_PORT || 3306}`);
    console.log(`   数据库: ${process.env.DB_NAME || 'bank_management'}`);
    
  } catch (error) {
    console.error('❌ 数据库初始化失败:', error);
    process.exit(1);
  } finally {
    await sequelize.close();
    console.log('📊 数据库连接已关闭');
  }
}

// 运行初始化
if (require.main === module) {
  initDatabase();
}

module.exports = initDatabase;