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

export interface IInvoiceBase {
  invoiceNumber?: number;
  company: Types.ObjectId;
  issuedDate: Date;
  dueDate: Date;
  maxUserCount?: number;
  planValidity?: {
    validfor: number;
    validUnit: 'days' | 'months' | 'years';
  };
  price: number;
  tax: number;
  discount: number;
  finalPrice: number;
  note?: string;
  status: 'paid' | 'unpaid' | 'overdue';
}

export interface IInvoice extends IInvoiceBase, Partial<AuditFields> {}

export interface IInvoiceDoc extends IInvoice, Document {}

export interface IInvoiceModel extends IPaginateModel<IInvoiceDoc> {}

export type CreateInvoiceBody = Omit<IInvoiceBase, 'invoiceNumber' | 'sequenceNumber'> &
  Partial<Pick<AuditFields, 'createdBy' | 'updatedBy'>>;

export type UpdateInvoiceBody = Partial<Omit<IInvoice, 'invoiceNumber' | 'sequenceNumber'>>;