import { DataTypes, Model, Optional, Sequelize } from 'sequelize';

export interface UserRoleAttributes { }

export class UserRole extends Model<UserRoleInterface, UserRoleAttributes> implements UserRoleInterface {
    public userId!: number;
    public accountId!: number;
    public roleId!: number;
    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;

    static initModel(sequelize: Sequelize): typeof UserRole {
        UserRole.init(
            {
                accountId: { type: DataTypes.BIGINT, allowNull: true, defaultValue: null, comment: "User's account identifier", unique: 'user-role' },
                userId: { type: DataTypes.BIGINT, allowNull: false, comment: "User's identifier", unique: 'user-role' },
                roleId: { type: DataTypes.BIGINT, allowNull: false, comment: "role identifier", unique: 'user-role' },
            },
            {
                paranoid: true,
                underscored: true,
                sequelize,
                tableName: 'user_roles',
                timestamps: true,
            }
        );
        return UserRole;
    }

    public static associate(models: any) {
        UserRole.belongsTo(models.User, { foreignKey: 'userId' });
        UserRole.belongsTo(models.Role, { foreignKey: 'roleId' });
    }
}
