package eu.dnetlib.espas.sosservice;

import eu.dnetlib.espas.exception.OwsException;
import org.apache.log4j.Logger;
import org.springframework.core.io.Resource;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class BasicSOSConfiguration implements SOSConfiguration {
    protected Resource configFile = null;
    protected String xmlDirectory = null;
    protected String templateMode = null;

    protected Properties properties = null;
    protected List<String> fileNames = null;


    private final Logger logger = Logger.getLogger(BasicSOSConfiguration.class);

    public void init() throws OwsException {
        try {
            this.properties = new Properties();
            this.properties.load(configFile.getInputStream());

            if (templateMode.equalsIgnoreCase("filesystem")) {
                this.fileNames = new ArrayList<String>();
                File resourcesDirectory = new File(xmlDirectory);
                if (resourcesDirectory.isDirectory() && resourcesDirectory.listFiles() != null) {
                    for (File file : resourcesDirectory.listFiles()) {
                        this.fileNames.add(file.getAbsolutePath());
                    }
                }
            }
        } catch (NullPointerException e) {
            logger.error("No file in the defined directory.", e);

        } catch (IOException e) {
            logger.error("Cannot read Properties from Resource file.", e);

        } catch (Exception e) {
            logger.error("Exception in Jdbc configuration.", e);
        }
    }

    @Override
    public Resource getConfigFile() {
        return configFile;
    }

    @Override
    public void setConfigFile(Resource configFile) {
        this.configFile = configFile;
    }

    @Override
    public Properties getProperties() {
        return properties;
    }

    @Override
    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public List<String> getFileNames() {
        return fileNames;
    }

    public void setFileNames(List<String> fileNames) {
        this.fileNames = fileNames;
    }

    @Override
    public String getXmlDirectory() {
        return xmlDirectory;
    }

    @Override
    public void setXmlDirectory(String xmlDirectory) {
        this.xmlDirectory = xmlDirectory;
    }

    @Override
    public String getTemplateMode() {
        return templateMode;
    }

    @Override
    public void setTemplateMode(String templateMode) {
        this.templateMode = templateMode;
    }
}
