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

export interface ContactUsAttachmentAttributes extends Optional<ContactUsAttachmentInterface, 'id'> {}

export class ContactUsAttachment extends Model<ContactUsAttachmentInterface, ContactUsAttachmentAttributes> implements ContactUsAttachmentInterface {
    public id!: number;
    public contactusId!: number;
    public attachmentId!: number;

    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;

    static initModel(sequelize: Sequelize): typeof ContactUsAttachment {
        ContactUsAttachment.init(
            {
                id: { type: DataTypes.BIGINT, autoIncrement: true, primaryKey: true, comment: "Unique identifier" },
                contactusId: { type: DataTypes.BIGINT, allowNull: false, comment: "Reference to chat message" },
                attachmentId: { type: DataTypes.BIGINT, allowNull: false, comment: "Reference to attachment" }
            },
            {
                paranoid: true,
                underscored: true,
                sequelize,
                tableName: "contactus_attachments",
                timestamps: true,
                indexes: [
                    { name: "contactus-attachment-index", fields: ["contactus_id"] },
                    { name: "attachment-contactus-index", fields: ["attachment_id"] },
                    { name: "contactattach-unique", unique: true, fields: ["contactus_id", "attachment_id"] }
                ]
            }
        );
        return ContactUsAttachment;
    }

    public static associate(models: any) {
        // belongsTo for explicit relations
        ContactUsAttachment.belongsTo(models.ContactUs, { foreignKey: "contactusId", as: "contactus" });
        ContactUsAttachment.belongsTo(models.Attachment, { foreignKey: "attachmentId", as: "attachment" });
    }
}
