<?php

namespace App\Services\Interest;

use App\Models\Credit;
use Carbon\Carbon;

interface InterestCalculationStrategy
{
    /**
     * Calcula el plan de cuotas para un crédito.
     *
     * @param  Credit  $credit  El crédito para calcular
     * @return array<array{
     *     installment_number: int,
     *     due_date: string,
     *     principal_amount: float,
     *     interest_amount: float,
     *     total_amount: float,
     *     principal_balance_after: float,
     *     amount_paid: float,
     *     status: string,
     *     created_at: Carbon,
     *     updated_at: Carbon
     * }> Array de cuotas calculadas
     */
    public function calculate(Credit $credit): array;

    /**
     * Retorna el nombre identificador del método.
     */
    public function getName(): string;
}
