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

export interface UserFollowedTopicAttributes extends UserFollowedTopicInterface {}
export interface UserFollowedTopicCreationAttributes extends Optional<UserFollowedTopicAttributes, 'id'> {}

export class UserFollowedTopic extends Model<UserFollowedTopicAttributes, UserFollowedTopicCreationAttributes> implements UserFollowedTopicAttributes {
    public id!: number;
    public userId!: number;
    public categoryId!: number;
    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;

    static initModel(sequelize: Sequelize): typeof UserFollowedTopic {
        UserFollowedTopic.init({
            id: { type: DataTypes.BIGINT, autoIncrement: true, primaryKey: true, comment: "unique identifier" },
            userId: { type: DataTypes.BIGINT, allowNull: false, comment: "user reference" },
            categoryId: { type: DataTypes.BIGINT, allowNull: false, comment: "category/topic reference" }
        }, {
            sequelize,
            tableName: 'user_followed_topics',
            timestamps: true,
            underscored: true,
            indexes: [
                { name: 'user_followed_topic_user_index', fields: ['user_id'] },
                { name: 'user_followed_topic_category_index', fields: ['category_id'] }
            ]
        });
        return UserFollowedTopic;
    }

    public static associate(models: any) {
        UserFollowedTopic.belongsTo(models.User, { foreignKey: 'userId', as: 'user' });
        UserFollowedTopic.belongsTo(models.Category, { foreignKey: 'categoryId', as: 'category' });
    }
}
