package com.rttsweb.stels_custom_extension;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;

public class ExtraFunctions {
    public static Timestamp parse_sql_timestamp(String d, String format) throws ParseException {
        if (d == null || format == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        String[] tokens = d.split("\\.");
        if (tokens.length > 1) {
            String[] endTokens = tokens[1].split(" ");
            String timeMSString = new String(String.valueOf(tokens[0]) + ".000 ");
            if (endTokens.length > 1) {
                timeMSString = String.valueOf(timeMSString) + endTokens[1];
            }
            long timeMS = sdf.parse(timeMSString).getTime();
            String microSecsString = new String(endTokens[0]);
            while (microSecsString.length() < 6) {
                microSecsString = String.valueOf(microSecsString) + "0";
            }
            int microSecs = Integer.parseInt(endTokens[0]);
            return ExtraFunctions.getTimestampFromMicros(timeMS * 1000 + (long)microSecs);
        }
        return new Timestamp(sdf.parse(d).getTime());
    }

    public static Timestamp getTimestampFromMicros(long pMicros) {
        long millis = TimeUnit.MICROSECONDS.toMillis(pMicros);
        long shaaritInMicros = pMicros - TimeUnit.MILLISECONDS.toMicros(millis);
        Timestamp ts = new Timestamp(millis);
        long nanos = (long)ts.getNanos() + TimeUnit.MICROSECONDS.toNanos(shaaritInMicros);
        ts.setNanos((int)nanos);
        return ts;
    }
}
