var mongoose = require('mongoose'); // ===== Broccolini Bot Models ===== const ticketSchema = new mongoose.Schema({ gmailThreadId: { type: String, required: true, unique: true, index: true }, discordThreadId: String, senderEmail: { type: String, required: true }, subject: String, createdAt: { type: Date, default: Date.now }, status: { type: String, default: 'open', enum: ['open', 'closed'] }, transcriptMessageId: String, claimedBy: String, escalated: { type: Boolean, default: false }, escalationTier: { type: Number, default: 0 }, ticketNumber: Number, priority: { type: String, default: 'normal', enum: ['low', 'normal', 'medium', 'high'] }, ticketTag: String, lastActivity: Date, welcomeMessageId: String, claimerId: String, creatorId: String, parentCategoryId: String, pendingDelete: { type: Boolean, default: false } }); ticketSchema.index({ status: 1, lastActivity: 1 }); ticketSchema.index({ senderEmail: 1, status: 1 }); ticketSchema.index({ discordThreadId: 1 }); mongoose.model('Ticket', ticketSchema); mongoose.model('TicketCounter', new mongoose.Schema({ senderLocal: { type: String, required: true, unique: true }, counter: { type: Number, default: 1 } })); mongoose.model('Transcript', new mongoose.Schema({ gmailThreadId: { type: String, required: true }, transcriptMessageId: String, createdAt: { type: Date, default: Date.now } })); mongoose.model('Tag', new mongoose.Schema({ name: { type: String, required: true, unique: true }, content: { type: String, required: true }, createdAt: { type: Date, default: Date.now }, createdBy: String, useCount: { type: Number, default: 0 } })); mongoose.model('StaffSettings', new mongoose.Schema({ userId: { type: String, required: true, unique: true }, guildId: { type: String, required: true }, notifyDm: { type: Boolean, default: false }, updatedAt: { type: Date, default: Date.now } })); mongoose.model('StaffSignature', new mongoose.Schema({ userId: { type: String, required: true, unique: true }, guildId: { type: String, required: true }, valediction: { type: String, default: '' }, displayName: { type: String, default: '' }, tagline: { type: String, default: '' }, updatedAt: { type: Date, default: Date.now } }));