const { DataTypes } = require("sequelize");
const sequelize = require("../config/database");
const bcrypt = require("bcryptjs");

const User = sequelize.define('User', {
    user_id: {
        // เปลี่ยนจาก INTEGER autoIncrement เป็น UUID
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
    },
    first_name: {
        type: DataTypes.STRING(100),
        allowNull: false,
    },
    last_name: {
        type: DataTypes.STRING(100),
        allowNull: false,
    },
    email: {
        type: DataTypes.STRING(255),
        allowNull: false,
        unique: true,
    },
    password: {
        type: DataTypes.STRING(255),
        allowNull: false,
    },
    role: {
        type: DataTypes.STRING(20),
        allowNull: false,
        defaultValue: 'employee',
    },
    created_at: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: DataTypes.NOW,
    },
    updated_at: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: DataTypes.NOW,
    },
}, {
    tableName: 'users',
    timestamps: false,
});

// ตัวอย่างการใช้ hook เพื่อเข้ารหัส password ก่อนบันทึกลง DB
User.beforeCreate(async (user, options) => {
    const hashedPassword = await bcrypt.hash(user.password, 10);
    user.password = hashedPassword;
});

User.beforeUpdate(async (user, options) => {
    if (user.changed('password')) {
        const hashedPassword = await bcrypt.hash(user.password, 10);
        user.password = hashedPassword;
    }
});

// (async () => {
//     try {
//         // sync() จะสร้างตารางตาม Model ทั้งหมดที่มีในโปรเจกต์ (ถ้ายังไม่มี)
//         // หากมีอยู่แล้วและต้องการ drop table เดิมให้ใช้ force: true (ไม่แนะนำบน production)
//         await sequelize.sync({ force: false });

//         console.log("Table(s) created successfully!");

//         // ตัวอย่างการทดสอบสร้าง User ทันที (ถ้าต้องการ)
        // const newUser = await User.create({
        //     first_name: "Jane",
        //     last_name: "Doe",
        //     email: "jane@example.com",
        //     password: "123456", // จะถูก hash จาก hook ใน model
        //     role: "employee",
        // });
//         console.log("New user created:", newUser.user_id);

//     } catch (error) {
//         console.error("Error creating table(s):", error);
//     } finally {
//         // ปิด connection เมื่อเสร็จสิ้นงาน (ขึ้นอยู่กับว่าเราต้องการปิดหรือไม่)
//         await sequelize.close();
//     }
// })();

module.exports = User;
