package com.jbidwatcher.util;
import com.jbidwatcher.util.config.JConfig;
import javax.annotation.Nullable;
import java.text.MessageFormat;
/**
* Created by mrs on 6/14/15.
*/
public class TimeLeftBuilder {
private static final String mf_min_sec = "{6}{2,number,##}m, {7}{3,number,##}s";
private static final String mf_hrs_min = "{5}{1,number,##}h, {6}{2,number,##}m";
private static final String mf_day_hrs = "{4}{0,number,##}d, {5}{1,number,##}h";
private static final String mf_min_sec_detailed = "{6}{2,number,##} minute{2,choice,0#, |1#, |1<s,} {7}{3,number,##} second{3,choice,0#|1#|1<s}";
private static final String mf_hrs_min_detailed = "{5}{1,number,##} hour{1,choice,0#, |1#, |1<s,} {6}{2,number,##} minute{2,choice,0#|1#|1<s}";
private static final String mf_day_hrs_detailed = "{4}{0,number,##} day{0,choice,0#, |1#, |1<s,} {5}{1,number,##} hour{1,choice,0#|1#|1<s}";
private static String convertToMsgFormat(String simpleFormat) {
String msgFmt = simpleFormat.replaceAll("DD", "{4}{0,number,##}");
msgFmt = msgFmt.replaceAll("HH", "{5}{1,number,##}");
msgFmt = msgFmt.replaceAll("MM", "{6}{2,number,##}");
msgFmt = msgFmt.replaceAll("SS", "{7}{3,number,##}");
return msgFmt;
}
@SuppressWarnings({"FeatureEnvy"})
private static String getTimeFormatter(long days, long hours) {
String mf;
boolean use_detailed = JConfig.queryConfiguration("timeleft.detailed", "false").equals("true");
String cfg;
if(days == 0) {
if(hours == 0) {
mf = use_detailed?mf_min_sec_detailed:mf_min_sec;
cfg = JConfig.queryConfiguration("timeleft.minutes");
if(cfg != null) mf = convertToMsgFormat(cfg);
} else {
mf = use_detailed?mf_hrs_min_detailed:mf_hrs_min;
cfg = JConfig.queryConfiguration("timeleft.hours");
if (cfg != null) mf = convertToMsgFormat(cfg);
}
} else {
mf = use_detailed?mf_day_hrs_detailed:mf_day_hrs;
cfg = JConfig.queryConfiguration("timeleft.days");
if (cfg != null) mf = convertToMsgFormat(cfg);
}
return mf;
}
private static String pad(long x) {
return (x < 10) ? " " : "";
}
@Nullable
public static String getTimeLeftString(long dateDiff) {
if (dateDiff > Constants.ONE_DAY * 60) return "N/A";
if (dateDiff >= 0) {
long days = dateDiff / (Constants.ONE_DAY);
dateDiff -= days * (Constants.ONE_DAY);
long hours = dateDiff / (Constants.ONE_HOUR);
dateDiff -= hours * (Constants.ONE_HOUR);
long minutes = dateDiff / (Constants.ONE_MINUTE);
dateDiff -= minutes * (Constants.ONE_MINUTE);
long seconds = dateDiff / Constants.ONE_SECOND;
String mf = TimeLeftBuilder.getTimeFormatter(days, hours);
Object[] timeArgs = {days, hours, minutes, seconds,
TimeLeftBuilder.pad(days), TimeLeftBuilder.pad(hours), TimeLeftBuilder.pad(minutes), TimeLeftBuilder.pad(seconds)};
return (MessageFormat.format(mf, timeArgs));
}
return null;
}
}