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

export interface RoleMasterAttributes {
    id: number;
    role: string;
    is_active: boolean;
}

interface RoleMasterCreationAttributes extends Optional<RoleMasterAttributes, 'id'> {}

export class RoleMaster
    extends Model<RoleMasterAttributes, RoleMasterCreationAttributes>
    implements RoleMasterAttributes 
{
    public static associate: (models: any) => void;
    public id!: number;
    public role!: string;
    public is_active!: boolean;

    public toJSON(): RoleMasterAttributes {
        return {
            id: this.id,
            role: this.role,
            is_active: this.is_active
        };
    }
}

export default (sequelize: Sequelize, dataTypes: typeof DataTypes) => {
    RoleMaster.init(
        {
            id: {
                type: dataTypes.INTEGER,
                autoIncrement: true,
                primaryKey: true,
            },
            role: {
                type: dataTypes.STRING,
                allowNull: false,
                unique: true,
            },
            is_active: {
                type: dataTypes.BOOLEAN,
                allowNull: false,
                defaultValue: true,
            },
        },
        {
            sequelize,
            modelName: 'RoleMaster',
            tableName: 'role_masters',
            timestamps: true,
        }
    );

    RoleMaster.associate = (models: any) => {
        RoleMaster.hasMany(models.User, {
            sourceKey: 'id',
            foreignKey: 'role_id',
        });
    };

    return RoleMaster;
};