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

export interface ISyncSessionPeriodDocument extends Document {
  user: Types.ObjectId;
  local_id: number;
  session?: Types.ObjectId | null;
  local_session_id?: number;
  type: string;
  start_time: Date;
  end_time?: Date | null;
  duration_seconds?: number;
  duration_minutes?: number;
  remarks?: string | null;
  createdAt: Date;
  updatedAt: Date;
}

const syncSessionPeriodSchema = new Schema<ISyncSessionPeriodDocument>(
  {
    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 },
    type: { type: String, required: true },
    start_time: { type: Date, required: true },
    end_time: { type: Date, default: null },
    duration_seconds: { type: Number },
    duration_minutes: { type: Number },
    remarks: { type: String, 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.
syncSessionPeriodSchema.index({ user: 1, session: 1, local_id: 1 }, { unique: true });

export default mongoose.model<ISyncSessionPeriodDocument>('SyncSessionPeriod', syncSessionPeriodSchema);
