import { Document, Types } from 'mongoose';

import { IPaginateModel } from '@/shared/interfaces/model.interface';
import { AuditFields } from '@/shared/types/common';
import { ChargeType, Status } from '@/shared/constants/enum.constant';

// Base ProjectCharge Interface (Clean & concise)
export interface IProjectChargeBase {
  name: string;
  project: Types.ObjectId;
  amount: number;
  chargeType: ChargeType;
  companyId: Types.ObjectId;
  status: Status;
}

export interface IProjectCharge extends IProjectChargeBase, AuditFields {}

export interface IProjectChargeDoc extends IProjectCharge, Document {}

export interface IProjectChargeModel extends IPaginateModel<IProjectChargeDoc> {
  isProjectChargeNameTaken(name: string): Promise<boolean>;
}

export type NewCreatedProjectCharge = IProjectChargeBase &
  Partial<Pick<AuditFields, 'createdBy' | 'updatedBy'>>;
export type UpdateProjectChargeBody = Partial<IProjectCharge>;
