package org.quality.gates.jenkins.plugin;

import hudson.Extension;
import hudson.util.FormValidation;
import jenkins.model.GlobalConfiguration;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;

import java.util.List;

@Extension
public class GlobalConfig extends GlobalConfiguration {

    private List<GlobalConfigDataForSonarInstance> listOfGlobalConfigData;

    private GlobalConfigurationService globalConfigurationService;

    public GlobalConfig() {

        load();
        globalConfigurationService = new GlobalConfigurationService();
    }


    public GlobalConfig(List<GlobalConfigDataForSonarInstance> listOfGlobalConfigData, GlobalConfigurationService globalConfigurationService) {

        this.listOfGlobalConfigData = listOfGlobalConfigData;
        this.globalConfigurationService = globalConfigurationService;
    }

    public List<GlobalConfigDataForSonarInstance> getListOfGlobalConfigData() {

        load();
        return listOfGlobalConfigData;
    }

    public List<GlobalConfigDataForSonarInstance> fetchListOfGlobalConfigData() {
        return listOfGlobalConfigData;
    }

    public void setGlobalConfigDataForSonarInstances(List<GlobalConfigDataForSonarInstance> globalConfigDataForSonarInstances) {
        this.listOfGlobalConfigData = globalConfigDataForSonarInstances;
    }

    @Override
    public boolean configure(StaplerRequest req, JSONObject json) throws FormException {

        listOfGlobalConfigData = globalConfigurationService.instantiateGlobalConfigData(json);
        save();

        return true;
    }

    public FormValidation doCheckName(@QueryParameter String name) {

        if (name.isEmpty()) {
            return FormValidation.error("Please insert a name for the instance.");
        }

        return FormValidation.ok();
    }

    public GlobalConfigDataForSonarInstance getSonarInstanceByName(String name) {

        for (GlobalConfigDataForSonarInstance globalConfigDataForSonarInstance : listOfGlobalConfigData) {
            if (name.equals(globalConfigDataForSonarInstance.getName())) {
                return globalConfigDataForSonarInstance;
            }
        }

        return null;
    }
}