/*
 * Copyright (c) 2023 ETH Zürich, Educational Development and Technology (LET)
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

package ch.ethz.seb.sebserver.gbl;

import org.springframework.context.annotation.Lazy;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;

import ch.ethz.seb.sebserver.gbl.model.exam.CollectingStrategy;
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings.ProctoringServerType;
import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetup.LmsType;
import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile;

@Lazy
@Service
@WebServiceProfile
public class FeatureServiceImpl implements FeatureService {

    private final Environment environment;

    public FeatureServiceImpl(final Environment environment) {
        this.environment = environment;
    }

    @Override
    public boolean isEnabled(final LmsType LmsType) {
        return this.environment.getProperty(toConfigName(
                FEATURE_SETTINGS_PREFIX + LmsType.class.getSimpleName() + "."
                        + LmsType.name()),
                Boolean.class,
                Boolean.TRUE);
    }

    @Override
    public boolean isEnabled(final CollectingStrategy collectingRoomStrategy) {
        return this.environment.getProperty(toConfigName(
                FEATURE_SETTINGS_PREFIX + CollectingStrategy.class.getSimpleName() + "."
                        + collectingRoomStrategy.name()),
                Boolean.class,
                Boolean.TRUE);
    }

    @Override
    public boolean isEnabled(final ProctoringServerType proctoringServerType) {
        return this.environment.getProperty(toConfigName(
                FEATURE_SETTINGS_PREFIX + ProctoringServerType.class.getSimpleName() + "."
                        + proctoringServerType.name()),
                Boolean.class,
                Boolean.TRUE);
    }

    private String toConfigName(final String key) {
        return key.replaceAll("_", "-");
    }

    @Override
    public boolean isScreenProcteringEnabled() {
        return this.environment.getProperty(toConfigName(
                FEATURE_SETTINGS_PREFIX + "seb.screenProctoring"),
                Boolean.class,
                Boolean.FALSE);
    }

}
