package fr.takima.lotka_volterra.predation;

import fr.takima.lotka_volterra.common.Probability;
import fr.takima.lotka_volterra.common.Distance;
import fr.takima.lotka_volterra.predator.Satiety;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Random;

@Component
public class DefaultPredationConfigurer implements PredationConfigurer {

    private final Random random;
    private final Distance maxDistance;
    private final Probability successProbability;
    private final Satiety successSatietyGain;
    private final Satiety failureSatietyLoss;

    public DefaultPredationConfigurer(Random random, PredationProperties properties) {
        this.random = random;
        this.maxDistance = new Distance(properties.getMaxDistance());
        this.successProbability = new Probability(BigDecimal.valueOf(properties.getSuccessProbability()));
        this.successSatietyGain = new Satiety(properties.getSuccessSatietyGain());
        this.failureSatietyLoss = new Satiety(properties.getFailureSatietyLoss());
    }

    @Override
    public Random random() {
        return random;
    }

    @Override
    public Distance maxDistance() {
        return maxDistance;
    }

    @Override
    public Probability successProbability() {
        return successProbability;
    }

    @Override
    public Satiety successSatietyGain() {
        return successSatietyGain;
    }

    @Override
    public Satiety failureSatietyLoss() {
        return failureSatietyLoss;
    }

}