import { DeepPartial, EntityTarget } from 'typeorm';
import { Injectable } from '@severo-tech/injection-decorator';
import { BaseDBRepository } from '../db/base-db-repository';
import { DebitInstallmentEntity } from '../db/entities';
import { IDebitInstallmentRepository } from '../../application/contracts';
import { DebitInstallment } from '../../domain/debit-installment';

@Injectable()
export class DebitInstallmentRepository extends BaseDBRepository<DebitInstallmentEntity, DebitInstallment> implements IDebitInstallmentRepository {
  protected entityClass: EntityTarget<DebitInstallmentEntity> = DebitInstallmentEntity;

  protected toModel(entity: DebitInstallmentEntity): DebitInstallment {
    return {
      id: entity.id,
      debitId: entity.debitId,
      value: entity.value,
      index: entity.index,
      dueDate: entity.dueDate,
      createdBy: entity.createdBy,
      updatedBy: entity.updatedBy,
      createdAt: entity.created_at,
      updatedAt: entity.updated_at,
    };
  }

  protected fromModel(model: Partial<DebitInstallment>): DeepPartial<DebitInstallmentEntity> {
    return {
      id: model.id,
      debitId: model.debitId,
      value: model.value,
      index: model.index,
      dueDate: model.dueDate,
      createdBy: model.createdBy,
      updatedBy: model.updatedBy,
    };
  }
}
