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

export interface LanguageAttributes extends Optional<LanguageInterface, 'id'> { }

export class Language extends Model<LanguageInterface, LanguageAttributes> implements LanguageInterface {
    public id!: number;
    public name!: string;
    public code!: string;
    public isDefault!: boolean;
    public isDriverEnabled!: boolean;
    public isCustomerEnabled!: boolean;
    public status!: number;
    public onlineStatus!: number;
    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;

    static initModel(sequelize: Sequelize): typeof Language {
        Language.init(
            {
                id: { type: DataTypes.BIGINT, autoIncrement: true, primaryKey: true, comment: "unique identifier" },
                name: { type: DataTypes.STRING, allowNull: true, defaultValue: null, unique: "unique-Languagename", comment: "Language name" },
                code: { type: DataTypes.STRING, allowNull: true, defaultValue: null, unique: "unique-language", comment: "Language code" },
                isDefault: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, comment: "Is default?" },
                isDriverEnabled: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, comment: "Is driver enabled?" },
                isCustomerEnabled: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, comment: "Is customer enabled?" },
                status: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 0, comment: "Language's Account status" }
            },
            { paranoid: true, underscored: true, sequelize, tableName: 'languages', timestamps: true }
        );
        return Language;
    }

    public static associate(models: any) {
    }
}
