package de.danoeh.antennapod.util;

import android.content.Context;
import android.text.format.DateUtils;
import android.util.Log;
import de.danoeh.antennapod.R;

/** Provides methods for converting various units. */
public final class Converter {
    /** Class shall not be instantiated. */
    private Converter() {
    }

    /** Logging tag. */
    private static final String TAG = "Converter";


    /** Indicates that the value is in the Byte range.*/
    private static final int B_RANGE = 0;
    /** Indicates that the value is in the Kilobyte range.*/
    private static final int KB_RANGE = 1;
    /** Indicates that the value is in the Megabyte range.*/
    private static final int MB_RANGE = 2;
    /** Indicates that the value is in the Gigabyte range.*/
    private static final int GB_RANGE = 3;
    /** Determines the length of the number for best readability.*/
    private static final int NUM_LENGTH = 1000;
    
    
    private static final int HOURS_MIL = 3600000;
	private static final int MINUTES_MIL = 60000;
	private static final int SECONDS_MIL = 1000;

    /** Takes a byte-value and converts it into a more readable
     *  String.
     *  @param input The value to convert
     *  @return The converted String with a unit
     * */
    public static String byteToString(final long input) {
        int i = 0;
        int result = 0;

        for (i = 0; i < GB_RANGE + 1; i++) {
            result = (int) (input / Math.pow(1024, i));
            if (result < NUM_LENGTH) {
                break;
            }
        }

        switch (i) {
            case B_RANGE:
                return result + " B";
            case KB_RANGE:
                return result + " KB";
            case MB_RANGE:
                return result + " MB";
            case GB_RANGE:
                return result + " GB";
            default:
                Log.e(TAG, "Error happened in byteToString");
                return "ERROR";
        }
    }
    
    /** Converts milliseconds to a string containing hours, minutes and seconds */
    public static String getDurationStringLong(int duration) {	
    	int h = duration / HOURS_MIL;
    	int rest = duration - h * HOURS_MIL;
    	int m = rest / MINUTES_MIL;
    	rest -= m * MINUTES_MIL;
    	int s = rest / SECONDS_MIL;
    	
    	return String.format("%02d:%02d:%02d", h, m, s);
    }
    
    /** Converts milliseconds to a string containing hours and minutes */
    public static String getDurationStringShort(int duration) {
    	int h = duration / HOURS_MIL;
    	int rest = duration - h * HOURS_MIL;
    	int m = rest / MINUTES_MIL;
    	
    	return String.format("%02d:%02d", h, m);
    }
    
    /** Converts milliseconds to a relative time span, */
    public static String getRelativeTimeSpanString(Context context, long millis) {
    	long now = System.currentTimeMillis();
    	return DateUtils.getRelativeTimeSpanString(
    			millis, now, 0, 0).toString();
    }
}

@@ -2721,17 +2721,16 @@
 ime span
-,
  */%0A    

comment typo fixed