import { Inject, Injectable } from '@severo-tech/injection-decorator';
import { ILogger } from '../../contracts';
import { EustIssue, EustIssueType, EustIssueUnit } from '../../../domain/eust-issue';
import { IEustIssueRepository } from '../../contracts/eust-issue-repository';

export type EustIssueCreateDto = {
  debitIds?: string[],

  invoiceId?: string | null,

  unit: EustIssueUnit,

  type: EustIssueType,

  description?: string,

  causedBy?: any,

  resolved?: boolean,
};

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

  @Inject('EustIssueRepository')
  private readonly eustIssueRepository!: IEustIssueRepository;

  public async execute(data: EustIssueCreateDto): Promise<EustIssue> {
    return this.eustIssueRepository.save({
      debitIds: data.debitIds ?? [],
      invoiceId: data.invoiceId,
      description: data.description?.trim(),
      causedBy: data.causedBy,
      resolved: data.resolved ?? false,
      type: data.type,
      unit: data.unit,
    });
  }
}
