const mongoose = require('../db/connect')

const { Schema } = mongoose

const crmCompany = new Schema({

    companyId: {
        type: String,
        required: true,
    },
    name: {
        type: String
    },
    integrations: [
        {
            name: { type: String, required: true },
            config: {
                type: Schema.Types.Mixed,
                default: {}
            }
        }
    ]

}, {
    timestamps: true,
    toJSON: { virtuals: true },
    toObject: { virtuals: true }
})

crmCompany.virtual('crms', {
    ref: 'CRM',
    localField: '_id',
    foreignField: 'company',
    justOne: false,
    // match: { rating: 4 }
})

crmCompany.pre('deleteOne', { document: true, query: false }, async function () {
    const crms = await this.model('CRM').find({ company: this._id })
    for (const crm of crms) {
        await crm.deleteOne() // Delete each CRM

        // Delete associated CRM_Contacts
        const crmContacts = await this.model('CRM_Contact').find({ crm: crm._id })
        for (const crmContact of crmContacts) {
            await crmContact.deleteOne()
        }
    }
}
)


const Company = mongoose.model('Company', crmCompany)

module.exports = Company
