import { Document, Types } from 'mongoose';

import { IPaginateModel } from '@/shared/interfaces/model.interface';
import { SupportStatus } from '@/shared/constants/enum.constant';
import { AuditFields } from '@/shared/types/common';
import { IUserDoc } from '@/modules/user/user.interfaces';
import { ICompanyDoc } from '@/modules/company/company.interface';

export interface ISupportBase {
  userId: Types.ObjectId;
  query: string;
  reply: string;
  status: SupportStatus;
  repliedAt: Date;
  companyId: Types.ObjectId;
  createdAt?: Date;
}

export interface ISupportPopulated
  extends Omit<ISupportBase, 'userId' | 'companyId'> {
  userId: IUserDoc;
  companyId: ICompanyDoc;
}

export interface ISupport extends ISupportBase, AuditFields {}

export interface ISupportDoc extends ISupport, Document {}

export interface ISupportModel extends IPaginateModel<ISupportDoc> {}

export type NewCreatedSupport = ISupportBase &
  Partial<Pick<AuditFields, 'createdBy' | 'updatedBy'>>;
export type UpdateSupportBody = Partial<ISupport>;

export interface ISupportFilter {
  search?: string;
  status?: SupportStatus;
  companyId?: Types.ObjectId | string;
  userId?: Types.ObjectId | string;
}
