package library.step4;

/** Tipo de socio de la biblioteca. */
public enum MemberType {
    STUDENT, TEACHER, VISITOR;

    /** Multa de un préstamo para este tipo de socio, en céntimos. */
    int fineFor(Loan loan) {
        int daysLate = loan.daysLate();
        int rate = loan.kind().dailyRate();
        return switch (this) {
            case STUDENT -> Math.min(Math.max(daysLate - 2, 0) * rate, 1000);
            case TEACHER -> loan.kind() == ItemKind.DVD ? daysLate * rate : 0;
            case VISITOR -> daysLate * rate * 2;
        };
    }
}
