const { DataTypes } = require('sequelize');
// 导入数据库连接实例
const { sequelize } = require('../config/db');

// 定义 User 模型（仅映射已手动创建的 users 表，不自动建表）
const User = sequelize.define('User', {
  // 字段1：id（对应表中 id 字段，主键自增）
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    comment: '用户ID'
  },
  // 字段2：username（对应表中 username 字段，非空唯一）
  username: {
    type: DataTypes.STRING(50),
    allowNull: false,
    unique: true,
    comment: '用户名（登录用）'
  },
  // 字段3：password（对应表中 password 字段，非空）
  password: {
    type: DataTypes.STRING(100),
    allowNull: false,
    comment: '用户密码'
  },
  // 字段4：email（对应表中 email 字段，可选唯一）
  email: {
    type: DataTypes.STRING(100),
    unique: true,
    allowNull: true,
    comment: '用户邮箱'
  },
  // 字段5-6：createdAt/updatedAt（对应表中这两个字段，自动维护，无需手动赋值）
  createdAt: {
    type: DataTypes.DATE,
    allowNull: false,
    comment: '创建时间'
  },
  updatedAt: {
    type: DataTypes.DATE,
    allowNull: false,
    comment: '更新时间'
  }
}, {
  // 模型配置：关键是关闭自动建表相关逻辑，仅做表映射
  tableName: 'users', // 明确指定映射的表名（必须和手动创建的表名一致）
  timestamps: true,   // 开启自动维护 createdAt/updatedAt（表中已手动创建这两个字段）
  paranoid: false,    // 关闭软删除（和表结构匹配）
  charset: 'utf8mb4',
  collate: 'utf8mb4_unicode_ci',
  freezeTableName: true, // 冻结表名，避免 Sequelize 自动给表名加复数（这里表名已手动设为 users，无需处理）
  syncOnAssociation: false // 关闭关联自动同步（避免模型操作影响表结构）
});

// 导出模型，供控制器调用（后续登录接口查数据用）
module.exports = User;