import { UniqueID } from "@repo/rdx-ddd";
import { Result } from "@repo/rdx-utils";
import { Transaction } from "sequelize";
import { CustomerInvoice, VerifactuRecord } from "../aggregates";
import { IVerifactuRecordRepository } from "../repositories/verifactu-repository.interface";

export class VerifactuRecordService {
  constructor(private readonly repository: IVerifactuRecordRepository) {}

  /**
   * Guarda un registro de VerifactuRecord en persistencia.
   *
   * @param verifactuRecord - El agregado a guardar.
   * @param transaction - Transacción activa para la operación.
   * @returns Result<CustomerInvoice, Error> - El agregado guardado o un error si falla la operación.
   */
  async saveVerifactuRecord(
    verifactuRecord: VerifactuRecord,
    transaction: unknown
  ): Promise<Result<VerifactuRecord, Error>> {
    return this.repository.save(verifactuRecord, transaction);
  }

  /**
   * Actualiza parcialmente una factura existente con nuevos datos.
   * No lo guarda en el repositorio.
   *
   * @param companyId - Identificador de la empresa a la que pertenece el cliente.
   * @param invoiceId - Identificador de la factura a actualizar.
   * @param changes - Subconjunto de props válidas para aplicar.
   * @param transaction - Transacción activa para la operación.
   * @returns Result<CustomerInvoice, Error> - Factura actualizada o error.
   */
  async sendInvoiceToVerifactu(
    invoiceId: UniqueID,
    transaction?: Transaction
  ): Promise<Result<CustomerInvoice, Error>> {
    // Verificar si la factura existe
    //    const invoiceResult = await this.getInvoiceByIdInCompany(invoiceId, transaction);

    //    if (invoiceResult.isFailure) {
    //      return Result.fail(invoiceResult.error);
    //    }

    console.log("ESTO ES UNA PRUEBA>>>>>>");

    return Result.ok(invoice);
  }
}
