package com.pinelabs.utils;

import com.pinelabs.exception.InputException;
import com.pinelabs.model.EncryptionPojo;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class InputDataReader {

    public static String appendTimeStamp(String jsonFile, boolean addUtcTime) throws IOException {
        String formattedJson = null;
        String dataFile = jsonFile;
        if (addUtcTime) {
            String timeStamp = String.format(",\"%s\":\"%s\"",
                                             new Object[] { "timestamp", Long.valueOf(System.currentTimeMillis()) });
            String unformattedJson = dataFile.substring(0, dataFile.lastIndexOf("}"));
            formattedJson = String.valueOf(unformattedJson) + timeStamp + "}";
        } else {
            formattedJson = dataFile;
        }
        return formattedJson;
    }
    public static String getJSONString(String plainInputText, boolean addUtcTime) throws IOException, InputException {
        StringBuilder sb = new StringBuilder();
        List<String> alist = Arrays.asList(plainInputText.split("\n"));
        if (alist.isEmpty()) {
            throw new InputException("Input data Error... Please provide correct input as per your selection");
        }
        sb.append("{");
        for (String line : alist) {
            String[] keyValue = line.split(":");
            if (keyValue.length == 2 && !keyValue[0].isEmpty())
                sb.append(String.format(",\"%s\":\"%s\"", new Object[] { keyValue[0], keyValue[1] }));
        }
        if (addUtcTime) {
            sb.append(String.format(",\"%s\":\"%s\"",
                                    new Object[] { "timestamp", Long.valueOf(System.currentTimeMillis()) }));
        }
        sb.append("}");
        return sb.toString().replaceFirst(",", "");
    }

    public static String getInputJsonData(EncryptionPojo encPojo) throws IOException, InputException {
        String dfOrJf =encPojo.getInputFormat();
        String plainInputString = encPojo.getPlainData();
        boolean isTimeStampRequired = Boolean.parseBoolean(encPojo.getIsTimeStampV());;

        String inputData = null;
        if ("jf".equals(dfOrJf)) {
            inputData = InputDataReader.appendTimeStamp(plainInputString, isTimeStampRequired);
        } else if ("df".equals(dfOrJf)) {
            inputData = InputDataReader.getJSONString(plainInputString, isTimeStampRequired);
        }
        return inputData;
    }

}
