import { Model, Schema, Types, model, models } from "mongoose"; export interface GameDocument { gameDate: Date; gameNumber: number; activePlayerIds: Types.ObjectId[]; startingPitcherId?: Types.ObjectId | null; lineupId?: Types.ObjectId | null; lineupNumber?: number | null; opponent?: string; teamScore?: number | null; opponentScore?: number | null; notes?: string; playerStats: Array<{ playerId: Types.ObjectId; playerName: string; pitchCount?: number | null; atBats?: number | null; runs?: number | null; hits?: number | null; doubles?: number | null; triples?: number | null; homeRuns?: number | null; runsBattedIn?: number | null; walks?: number | null; strikeouts?: number | null; stolenBases?: number | null; inningsPitchedOuts?: number | null; earnedRunsAllowed?: number | null; hitsAllowed?: number | null; walksAllowed?: number | null; strikeoutsPitched?: number | null; }>; createdAt?: Date; updatedAt?: Date; } const gameSchema = new Schema( { gameDate: { type: Date, required: true, index: true }, gameNumber: { type: Number, required: true, min: 1 }, activePlayerIds: [{ type: Schema.Types.ObjectId, ref: "Player" }], startingPitcherId: { type: Schema.Types.ObjectId, ref: "Player", default: null }, lineupId: { type: Schema.Types.ObjectId, ref: "Lineup", default: null }, lineupNumber: { type: Number, default: null }, opponent: { type: String, default: "" }, teamScore: { type: Number, default: null }, opponentScore: { type: Number, default: null }, notes: { type: String, default: "" }, playerStats: [ { playerId: { type: Schema.Types.ObjectId, ref: "Player", required: true }, playerName: { type: String, required: true }, atBats: { type: Number, default: null }, runs: { type: Number, default: null }, hits: { type: Number, default: null }, doubles: { type: Number, default: null }, triples: { type: Number, default: null }, homeRuns: { type: Number, default: null }, runsBattedIn: { type: Number, default: null }, walks: { type: Number, default: null }, strikeouts: { type: Number, default: null }, stolenBases: { type: Number, default: null }, pitchCount: { type: Number, default: null }, inningsPitchedOuts: { type: Number, default: null }, earnedRunsAllowed: { type: Number, default: null }, hitsAllowed: { type: Number, default: null }, walksAllowed: { type: Number, default: null }, strikeoutsPitched: { type: Number, default: null } } ] }, { timestamps: true } ); gameSchema.index({ gameDate: 1, gameNumber: 1 }, { unique: true }); export const GameModel = (models.Game as Model) || model("Game", gameSchema);