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'] }, lastActivity: Date, welcomeMessageId: String, claimerId: String, creatorId: String, parentCategoryId: String, pendingDelete: { type: Boolean, default: false }, game: String, closedAt: Date }); 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 } })); const staffActionSchema = new mongoose.Schema({ staffId: { type: String, required: true }, type: { type: String, required: true }, tier: { type: Number, default: 0 }, ticketType: String, priority: String, game: String, senderEmail: String, creatorId: String, gmailThreadId: String, guildId: String, createdAt: { type: Date, default: Date.now }, // close-only closerType: String, resolverId: String, wasClaimed: Boolean, // transfer-only fromId: String, toId: String }); staffActionSchema.index({ staffId: 1, createdAt: -1 }); staffActionSchema.index({ gmailThreadId: 1, createdAt: 1 }); mongoose.model('StaffAction', staffActionSchema);