import { Document, Types } from 'mongoose';

import { IPaginateModel } from '@/shared/interfaces/model.interface';
import { AuditFields } from '@/shared/types/common';
import {
  SCOPE,
  PAPER_SIZE,
  STATUS,
} from '@/modules/documents/documents.constant';

// Base Documents Interface (Clean & concise)
export interface IDocumentsBase {
  name: string;
  paperSize: PAPER_SIZE;
  scope: SCOPE;
  projectIds: Types.ObjectId[];
  content: string;
  companyId: Types.ObjectId;
  status: STATUS;
  showLogoInHeader?: boolean;
  startFromHalfPage?: boolean;
}

export interface IDocuments extends IDocumentsBase, AuditFields {}

export interface IDocumentsDoc extends IDocuments, Document {}

export interface IDocumentsModel extends IPaginateModel<IDocumentsDoc> {
  isDocumentsNameTaken(name: string): Promise<boolean>;
}

export type NewCreatedDocuments = IDocumentsBase &
  Partial<Pick<AuditFields, 'createdBy' | 'updatedBy'>>;
export type UpdateDocumentsBody = Partial<IDocuments>;
