/**
 * Eine Person mit einer Adresse und Ehegatten.
 */
public class Person {

	private String nachname;
	
	private String vorname;
	
	private int alter;
	
	private Adresse adresse;
	
	private Person ehegatte;

	/**
	 * Erzeugt eine neue Person mit gegebenen vorname, nachname, alter
	 * und adresse. 
	 * @param vorname
	 * @param nachname
	 * @param alter eine zahl größer gleich 0
	 * @param adresse eine Adresse, kann auch null sein.
	 */
	public Person(String vorname, String nachname,
			int alter, Adresse adresse) {
		this.vorname = vorname;
		this.nachname = nachname;
		if (alter >= 0) {
			this.alter = alter;
		} else {
			// Fehlerbehandlung
		}
		this.adresse = adresse;
		// stelle sicher, dass "adresse" zu dieser Person gehört
		if (adresse != null) {
			adresse.person = this;
		}
	}

	/**
	 * Erzeugt eine Person mit gegebenen vor- und nachnamen, alter und
	 * ohne Adresse oder Ehegatten.
	 * 
	 * @param vorname
	 * @param nachname
	 * @param alter eine Zahl größer gleich Null
	 */
	public Person(String vorname, String nachname,
				int alter) {
		this(vorname, nachname, alter, null);
	}

	/**
	 * Heiratet den angegebenen Ehegatten. Dieser
	 * muss ungleich null sein. Eine Person kann
	 * nicht sich selbst heiraten. Beide können
	 * nur heiraten, wenn keiner von ihnen verheiratet
	 * ist.
	 */
	public void heiraten(Person ehegatte) {
		if (this != ehegatte
				& this.ehegatte == null
				& ehegatte.ehegatte == null) {
			String nachname = ehegatte.nachname 
							+ "-" + this.nachname;
			ehegatte.nachname = nachname;
			this.nachname = nachname;
			this.ehegatte = ehegatte;
			ehegatte.ehegatte = this;
		}
	}

	/**
	 * Diese Person und sein Ehegatte trennen sich wieder.
	 */
	public void scheiden() {
		if (ehegatte != null) {
			ehegatte.ehegatte = null;
			ehegatte = null;
		}
	}

	public Adresse getAdresse() {
		return adresse;
	}

	public int getAlter() {
		return alter;
	}

	public Person getEhegatte() {
		return ehegatte;
	}

	public String getNachname() {
		return nachname;
	}

	public String getVorname() {
		return vorname;
	}

	public void setAdresse(Adresse adresse) {
		this.adresse = adresse;
	}

	
	public void setAlter(int alter) {
		this.alter = alter;
	}

	public void setEhegatte(Person ehegatte) {		
		this.ehegatte = ehegatte;
	}

	public void setNachname(String nachname) {
		this.nachname = nachname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	
}

