import { UniqueID } from "@repo/rdx-ddd";
import { Maybe, Result } from "@repo/rdx-utils";
import { CustomerInvoiceNumber, CustomerInvoiceSerie } from "../value-objects";

/**
 * Servicio de dominio que define cómo se genera el siguiente número de factura.
 */
export interface ICustomerInvoiceNumberGenerator {
  /**
   * Devuelve el siguiente número de factura disponible para una empresa dentro de una "serie" de factura.
   *
   * @param companyId - Identificador de la empresa
   * @param serie - Serie por la que buscar la última factura
   * @param transaction - Transacción activa
   */
  nextForCompany(
    companyId: UniqueID,
    series: Maybe<CustomerInvoiceSerie>,
    transaction: any
  ): Promise<Result<CustomerInvoiceNumber, Error>>;
}
