import { Sequelize, DataTypes, Optional, Model } from "sequelize"

interface ColorCateAttributes {
    id: number
    name: string
    alias: string
    describe: string

    createdAt?: Date
    updatedAt?: Date
    deletedAt?: Date
}

export interface ColorCateInput extends Optional<ColorCateAttributes, "id" | "alias" | "describe"> {}
export interface ColorCateOutput extends Required<ColorCateAttributes> {}
export type TColorCateModel = ReturnType<typeof ColorCateModel>

export default function ColorCateModel(sequelize: Sequelize) {
    interface ColorCateInstance extends Model<ColorCateAttributes, ColorCateInput>, ColorCateAttributes {}
    const ColorCate = sequelize.define<ColorCateInstance>(
        "color_cate",
        {
            id: {
                type: DataTypes.INTEGER,
                autoIncrement: true,
                primaryKey: true,
            },
            name: {
                type: DataTypes.STRING,
                allowNull: false,
            },
            alias: {
                type: DataTypes.STRING,
            },
            describe: {
                type: DataTypes.STRING,
            },
        },
        {
            underscored: true,
            deletedAt: true,
            paranoid: true,
            timestamps: true,
        },
    )
    // 覆盖Color的toJSON方法
    ColorCate.prototype.toJSON = function () {
        const values = Object.assign({}, this.get()) as ColorCateAttributes
        delete values.deletedAt
        return values
    }
    ColorCate.associate = function (models) {
        
    }
    return ColorCate
}