import { DomainError } from "@repo/rdx-ddd";

/**
 * Error de dominio que indica que una Proforma no puede convertirse a Factura (issue).
 *
 * @remarks
 * - Se lanza cuando el flujo de emisión (issue) desde una Proforma no es válido
 *
 * @public
 */
export class ProformaCannotBeConvertedToInvoiceError extends DomainError {
  /**
   * Crea una instancia del error con el identificador de la Proforma.
   *
   * @param id - Identificador de la Proforma.
   * @param options - Opciones nativas de Error (puedes pasar `cause`).
   */
  constructor(id: string, options?: ErrorOptions) {
    super(`Error. Proforma with id '${id}' cannot be converted to an Invoice.`, options);
    this.name = "ProformaCannotBeConvertedToInvoiceError";
  }
}

/**
 * *Type guard* para `ProformaCannotBeConvertedToInvoiceError`.
 *
 * @param e - Error desconocido
 * @returns `true` si `e` es `ProformaCannotBeConvertedToInvoiceError`
 */
export const isProformaCannotBeConvertedToInvoiceError = (
  e: unknown
): e is ProformaCannotBeConvertedToInvoiceError =>
  e instanceof ProformaCannotBeConvertedToInvoiceError;
