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

export interface UserDevicesAttributes extends Optional<UserDeviceInterface, 'id'> { }

export class UserDevice extends Model<UserDeviceInterface, UserDevicesAttributes> implements UserDeviceInterface {
    public id!: number;
    public userId!: number;
    public accountId!: number;
    public deviceType!: string;
    public device!: string;
    public status!: number;
    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;

    static initModel(sequelize: Sequelize): typeof UserDevice {
        UserDevice.init(
            {
                id: { type: DataTypes.BIGINT, autoIncrement: true, primaryKey: true, comment: "unique identifier" },
                userId: { type: DataTypes.BIGINT, allowNull: false, comment: "User identifier" },
                accountId: { type: DataTypes.BIGINT, allowNull: true, defaultValue: null, comment: "account identifier" },
                deviceType: { type: DataTypes.ENUM("android", "ios",), allowNull: false, comment: "device Type" },
                device: { type: DataTypes.STRING, allowNull: false, comment: "device" },
                status: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 1, comment: "device token status?" },
            },
            { paranoid: true, underscored: true, sequelize, tableName: 'user_devices', timestamps: true }
        );
        return UserDevice;
    }

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