package packTest;

import java.util.GregorianCalendar;

/**
 * Cette classe est une horloge lunaire. Sur base du timeStamp, elle offre l&rsquo;angle de phase en radians et en degr&eacute;s.
 * @author Christian Mascart
 *
 */
public class Horloge extends GregorianCalendar
{
	/**Lunaison en millisecondes*/
	public static final long lunaison = (long) (29.5305881 * 86400000l);
	public static final long origine = -19234766964000l - 136 * lunaison;
	private double anglePhase = 0;
	private long absoLune = 0;
	public Horloge()
	{
		super();
		this.setTimeInMillis(System.currentTimeMillis());
	}
	
	public Horloge(long pTime)
	{
		super();
		this.setTimeInMillis(pTime);
	}
	
	public void setTimeInMillis(long pTime)
	{
		super.setTimeInMillis(pTime);
		//Temps entre l'origine du saros 136 (14/06/1360 05:56:04 TU) et du gregorianCalendar
		long age = (this.getTimeInMillis() - origine);
		this.absoLune = (age / lunaison) + (age < 0 ? -1 : 0);
		long ageLune = (this.absoLune < 0 ? lunaison + (age % lunaison) : age % lunaison);
		anglePhase = ((double) ageLune / lunaison * 2 * Math.PI);
	}
	
	/**
	 * Getter de l'angle de phase de la lune
	 * @return L&rsquo;angle de phase lunaire en radians
	 */
	public double getPhase()
	{
		return (this.anglePhase);
	}
	
	/**
	 * Getter de l&rsquo;angle de phase de la Lune
	 * @return L&rsquo;angle de phase en degr&eacute;s.
	 */
	public int getPhaseDeg()
	{
		return((int)Math.toDegrees(this.anglePhase));
	}
	
	public long getAbsoLune()
	{
		return(this.absoLune);
	}
}
