import { Document, Types } from 'mongoose';
import { IPaginateModel } from '@/shared/interfaces/model.interface';
import { AuditFields } from '@/shared/types/common';
import { ActivityStatus, ActivityType } from '../activity.interface';

export interface IActivityRemainderBase {
  activityId: Types.ObjectId;
  leadId: Types.ObjectId;
  contactId: Types.ObjectId;
  assignedTo: Types.ObjectId;
  scheduleDateTime: Date;
  activityType: ActivityType;
  isNotificationSent?: boolean;
  status?: ActivityStatus;
}

export interface IActivityRemainder
  extends IActivityRemainderBase,
    AuditFields {}

export interface IActivityRemainderDoc extends IActivityRemainder, Document {}

export interface IActivityRemainderModel
  extends IPaginateModel<IActivityRemainderDoc> {}

export type NewCreatedActivityRemainder = IActivityRemainder &
  Partial<Pick<AuditFields, 'createdBy' | 'updatedBy'>>;

export type UpdateActivityRemainderBody = Partial<IActivityRemainder>;

export type PopulatedActivityRemainderFields = {
  isNotificationSent: boolean;
  scheduleDateTime: Date;
  activityId: Types.ObjectId;
  status: ActivityStatus;
  leadId: {
    contactDetails: {
      name: string;
    };
  };
  contactId: Types.ObjectId;
  assignedTo: Types.ObjectId;
  activityType: ActivityType;
  createdBy: Types.ObjectId;
  updatedBy: Types.ObjectId;
};
