package de.synaxon.graphitereceiver.core;

import de.synaxon.graphitereceiver.domain.MapPrefixSuffix;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class MapperPrefixSuffix {

    private File hostnameMap;

    public MapperPrefixSuffix(String path) throws FileNotFoundException {
        Log logger = LogFactory.getLog(MapperPrefixSuffix.class);
        this.hostnameMap = new File(path);
        if(this.hostnameMap.exists()) {
            if(this.hostnameMap.length() == 0) {
                logger.warn("hostname map no exist or is empty");
            }
        } else {
            throw new FileNotFoundException();
        }

    }

    public Map<String, MapPrefixSuffix> getAllMapper(){
        String separator = ";";
        Map<String, MapPrefixSuffix> hostMap = new HashMap<String, MapPrefixSuffix>();
        BufferedReader bufferedReader = bufferedReaderFactory();
        String line;
        try {
            while((line = bufferedReader.readLine()) != null) {
                if(!line.startsWith("#")) {
                    String[] lineFound = line.split(separator);
                    MapPrefixSuffix mapPrefixSuffix = new MapPrefixSuffix(lineFound[1], lineFound[2]);
                    hostMap.put(lineFound[0].toLowerCase(), mapPrefixSuffix);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return hostMap;
    }

    private BufferedReader bufferedReaderFactory(){
        FileReader fileReader;
        BufferedReader bufferedReader = null;

        try {
            fileReader = new FileReader(this.hostnameMap);
            bufferedReader = new BufferedReader(fileReader);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return bufferedReader;
    }

}