package temp;

import java.text.DecimalFormat;

import enums.*;

public class Temperature {
	private double temp;
	private TempUnit tempUnit;

	public Temperature(double temp, TempUnit tempUnit) {
		this.temp = temp;
		this.tempUnit = tempUnit;
	}

	public Temperature(double temp) {
		this.temp = temp;
		this.tempUnit = TempUnit.KELVIN;
	}

	@Override
	public String toString() {
		DecimalFormat df = new DecimalFormat("#.##");
		
		if (this.tempUnit == TempUnit.CELSIUS) {
			return df.format(temp) + " C";
		}

		if (this.tempUnit == TempUnit.KELVIN) {
			return df.format(temp) + " K";
		}

		return "not valid unit";
	}

	public double getTempInGivenUnit(TempUnit tempUnit) {
		if (this.tempUnit == TempUnit.CELSIUS && tempUnit == TempUnit.CELSIUS) {
			return this.temp;
		} else if (this.tempUnit == TempUnit.KELVIN && tempUnit == TempUnit.KELVIN) {
			return this.temp;
		} else if (this.tempUnit == TempUnit.KELVIN && tempUnit == TempUnit.CELSIUS) {
			return this.temp - 272.15;
		}

		return this.temp + 272.15;
	}
	
	public static double getTempInGivenUnit(Temperature temp, TempUnit tempUnit) {
		if (temp.tempUnit == TempUnit.CELSIUS && tempUnit == TempUnit.CELSIUS) {
			return temp.getTemp();
		} else if (temp.tempUnit == TempUnit.KELVIN && tempUnit == TempUnit.KELVIN) {
			return temp.getTemp();
		} else if (temp.tempUnit == TempUnit.KELVIN && tempUnit == TempUnit.CELSIUS) {
			return temp.getTemp() - 272.15;
		}

		return temp.getTemp() + 272.15;
	}


	public boolean isTempHigher(Temperature tempInput) {
		if (this.temp > tempInput.getTemp())
			return true;

		return false;
	}

	public double getTemp() {
		return temp;
	}

	public void setTemp(double temp) {
		this.temp = temp;
	}

	public TempUnit getTempUnit() {
		return tempUnit;
	}

	public void setTempUnit(TempUnit tempUnit) {
		this.tempUnit = tempUnit;
	}

	public double getTempsSum(Temperature t1, Temperature t2) {
		return t2.temp + t2.temp;
	}

}