import mongoose, { Document, Schema, Types } from 'mongoose';

export interface ISyncTrackingEventDocument extends Document {
  user: Types.ObjectId;
  local_id: number;
  session?: Types.ObjectId | null;
  local_session_id?: number;
  event_type: string;
  event_time: Date;
  device_name?: string;
  operating_system?: string;
  ip_address?: string;
  metadata?: unknown;
  createdAt: Date;
  updatedAt: Date;
}

const syncTrackingEventSchema = new Schema<ISyncTrackingEventDocument>(
  {
    user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
    local_id: { type: Number, required: true },
    session: { type: Schema.Types.ObjectId, ref: 'SyncSession', default: null },
    local_session_id: { type: Number },
    event_type: { type: String, required: true },
    event_time: { type: Date, required: true },
    device_name: { type: String },
    operating_system: { type: String },
    ip_address: { type: String },
    metadata: { type: Schema.Types.Mixed, default: null },
  },
  { timestamps: true },
);

// local_id alone isn't globally unique per employee (per-device counter), so
// scope uniqueness by the resolved session too, matching how SyncSession is
// now disambiguated by device_name.
syncTrackingEventSchema.index({ user: 1, session: 1, local_id: 1 }, { unique: true });

export default mongoose.model<ISyncTrackingEventDocument>('SyncTrackingEvent', syncTrackingEventSchema);
