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

export interface ISyncResourceUsageDocument extends Document {
  user: Types.ObjectId;
  local_id: number;
  session?: Types.ObjectId | null;
  local_session_id?: number;
  cpu_usage_percent?: number;
  ram_usage_mb?: number;
  ram_usage_percent?: number;
  disk_read_speed_kbps?: number;
  disk_write_speed_kbps?: number;
  network_upload_speed_kbps?: number;
  network_download_speed_kbps?: number;
  total_memory_mb?: number;
  available_memory_mb?: number;
  device_name?: string;
  operating_system?: string;
  recorded_at: Date;
  createdAt: Date;
  updatedAt: Date;
}

const syncResourceUsageSchema = new Schema<ISyncResourceUsageDocument>(
  {
    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 },
    cpu_usage_percent: { type: Number },
    ram_usage_mb: { type: Number },
    ram_usage_percent: { type: Number },
    disk_read_speed_kbps: { type: Number },
    disk_write_speed_kbps: { type: Number },
    network_upload_speed_kbps: { type: Number },
    network_download_speed_kbps: { type: Number },
    total_memory_mb: { type: Number },
    available_memory_mb: { type: Number },
    device_name: { type: String },
    operating_system: { type: String },
    recorded_at: { type: Date, required: true },
  },
  { 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.
syncResourceUsageSchema.index({ user: 1, session: 1, local_id: 1 }, { unique: true });

export default mongoose.model<ISyncResourceUsageDocument>('SyncResourceUsage', syncResourceUsageSchema);
