import { Inject, Injectable } from '@severo-tech/injection-decorator';
import { DebitInstallment } from '../../../domain/debit-installment';
import { IDebitInstallmentRepository, ILogger } from '../../contracts';

export type DebitInstallmentCreateDTO = {
  debitId: string,

  index: number,

  dueDate: Date,

  value: number,

  createdBy?: string,
}

@Injectable()
export class CreateDebitInstallmentUseCase {
  @Inject('ZenviaLogger')
  private readonly logger!: ILogger;

  @Inject('DebitInstallmentRepository')
  private readonly debitInstallmentRepository!: IDebitInstallmentRepository;

  public async execute(data: DebitInstallmentCreateDTO): Promise<DebitInstallment> {
    return this.debitInstallmentRepository.save({
      debitId: data.debitId,
      index: data.index,
      dueDate: data.dueDate,
      value: data.value,
      createdBy: data.createdBy,
    });
  }
}
