package com.spun.util.parser;

import com.spun.util.StringUtils;

public class MassAmount extends TemplateDouble
{
  public static final int       GRAMS            = 0;
  public static final int       KILOGRAMS        = 1;
  public static final int       POUNDS           = 2;
  public static final String[]  UNITS            = {"Grams", "Kilograms", "Pounds"};
  private static final double[] UNIT_CONVERSIONS = {1, .001, 0.00220467};
  public MassAmount(double amount)
  {
    super(amount, "", "", 0, 2);
  }
  public MassAmount(double amount, int units)
  {
    super(convertUnits(amount, units, GRAMS), "", "", 0, 2);
  }
  public static int getUnits(String value)
  {
    return StringUtils.resolveEnumeration(value, UNITS);
  }
  public static double convertUnits(double amount, int fromUnits, int toUnits)
  {
    return (amount / UNIT_CONVERSIONS[fromUnits]) * UNIT_CONVERSIONS[toUnits];
  }
  public double convertUnits(int toUnits)
  {
    return this.amount * UNIT_CONVERSIONS[toUnits];
  }
  public double getAmountInUnits(int desiredUnits)
  {
    return convertUnits(desiredUnits);
  }
  public String inUnits(String desiredUnits)
  {
    return inFormat(getAmountInUnits(getUnits(desiredUnits)), defaultPrefix, defaultMaximumPrecision,
        defaultMinimumPrecision, defaultPostfix, true);
  }
  public String inUnits(String desiredUnits, int maximumPrecision, int minimumPrecision)
  {
    return inFormat(getAmountInUnits(getUnits(desiredUnits)), defaultPrefix, maximumPrecision,
        getDefaultMinimumPrecision(maximumPrecision), defaultPostfix, true);
  }
  public int getPoundsRoundedUp()
  {
    return getRoundedUp(MassAmount.POUNDS);
  }
  public int getRoundedUp(int inUnits)
  {
    return (int) Math.ceil(convertUnits(inUnits) - 0.001);
  }
}
