package de.accso.flexinale.infrastructure;

import de.accso.flexinale.application.Config;
import de.accso.flexinale.shared_kernel.FlexinaleIllegalArgumentException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FlexinaleSpringConfig implements Config {
    @Value("${application.title}")
    public String applicationTitle;

    @Value("${build.version}")
    public String buildVersion;

    @Value("${build.date}")
    public String buildDate;

    @Override
    public String getApplicationTitle() {
        return applicationTitle;
    }

    @Override
    public String getBuildVersion() {
        return buildVersion;
    }

    @Override
    public String getBuildDate() {
        return buildDate;
    }

    // -----------------------------------------------------------------------------------------------------------

    private final int quoteOnline;

    @Override
    public int getQuoteOnline() {
        return quoteOnline;
    }

    // -----------------------------------------------------------------------------------------------------------

    private final int minZeitZwischenVorfuehrungenInMinuten;

    @Override
    public int getMinZeitZwischenVorfuehrungenInMinuten() {
        return minZeitZwischenVorfuehrungenInMinuten;
    }

    // -----------------------------------------------------------------------------------------------------------

    public FlexinaleSpringConfig(@Value("${de.accso.flexinale.kontingent.quote.online:33}") final int quoteOnline,
                                 @Value("${de.accso.flexinale.vorfuehrung.min-zeit-zwischen-vorfuehrungen-in-minuten:30}") final int minZeitZwischenVorfuehrungenInMinuten) {
        if (quoteOnline < 0  || quoteOnline > 100) {
            String message = "Quote online should be a percentage, i.e. 0 <= quote online <= 100, but was " + quoteOnline;
            throw new FlexinaleIllegalArgumentException(message);
        }
        this.quoteOnline = quoteOnline;

        if (minZeitZwischenVorfuehrungenInMinuten < 0) {
            String message = "minZeitZwischenVorfuehrungenInMinuten should be positiv, but was "
                    + minZeitZwischenVorfuehrungenInMinuten;
            throw new FlexinaleIllegalArgumentException(message);
        }
        this.minZeitZwischenVorfuehrungenInMinuten = minZeitZwischenVorfuehrungenInMinuten;
    }

}
