/**
 *
 * Programmieraufgabe P-5 (Monat.java)
 *
 * @author Leonhard Fellermayr
 * @version 1.0
 */

/** Implementiert die Klasse Monat gem§ Aufgabenstellung */

public class Monat {
	
	/* 1. Instanzvariablen */
	
	/**
	 * 
	 * @param YEAR Dieses Jahr wird fr die Schaltjahrberechnung zugrunde gelegt.
	 * @param monNr Nummer des jeweiligen Monats
	 * @param monString Langer String, der alle Monatsnamen in gleichen Teillngen enthlt.
	 */
	
	private final int YEAR = 2004;
	
	private final int MON_JAN =  1;
	private final int MON_FEB =  2;
	private final int MON_APR =  4;
	private final int MON_JUN =  6;
	private final int MON_SEP =  9;
	private final int MON_NOV = 11;
	private final int MON_DEZ = 12;
	
	private final int MONSTR_PART_LENGTH = 9;

	private final int TAGE_31 = 31;
	private final int TAGE_30 = 30;
	private final int TAGE_29 = 29;
	private final int TAGE_28 = 28;
	
	private int monNr;
	private String monStr = "Januar   Februar  Mrz     April    Mai      Juni     Juli     August   SeptemberOktober  November Dezember ";
	
	/* 2. Methoden */
	
	public String getMonatStr () {
		
		return (this.monStr.substring(
				(this.monNr - 1) * MONSTR_PART_LENGTH,
				 this.monNr      * MONSTR_PART_LENGTH));

	}
	
	/**
	 *  isSchalt :: Ermittelt, ob es sich bei year um ein Schaltjahr handelt.
	 *  - private -
	 * 
	 *  @param year Monat
	 *  @return true wenn es sich bei year um ein Schaltjahr handelt, false sont
	 * 
	 */
	
	private boolean isSchalt (int year) {
		return (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0);
	}
	
	/**
	 *  daysInMonth :: Ermittelt Anzahl Tage des Monats.
	 * 
	 *  @return Anzahl Tage des Monats
	 * 
	 */
	
	public int daysInMonth () {
		
		/* Monate mit 30 Tagen */
		if ((this.monNr == MON_APR) || (this.monNr == MON_JUN) ||
				(this.monNr == MON_SEP) || (this.monNr == MON_NOV))
			return (TAGE_30);
		
		/* Sonderfall Februar */
		else
			if (this.monNr == MON_FEB)
				if (this.isSchalt(YEAR))
					return (TAGE_29);
				else
					return (TAGE_28);
			
		/* alle anderen Monate haben 31 Tage */
		else
			return (TAGE_31);

	}
	
	/* 3. Konstruktor */

	/**
	 * 
	 * @param givenMonNr Bei Instantiierung bergebener Monat
	 * 
	 */
	
	public Monat (int givenMonNr) {
		if ((givenMonNr < MON_JAN) || (givenMonNr > MON_DEZ)) {
			System.out.println ("Error: Number of month out of range: " + givenMonNr);
			System.exit (0);
		}
		else
			this.monNr = givenMonNr;
	}
	
}
