import java.time.LocalDate;
import java.time.Period;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;

import javax.mail.internet.InternetAddress;

public class Patient extends Person {
	
	public enum Gender {
		MALE,
		FEMALE,
		OTHER
	}
	
	public class MedicalInformation {
		
		public class Prescription {
			private final String name;
			private final double ammount;
			
			public Prescription(String name, double ammount) {
				this.name = name;
				this.ammount = ammount;
			}
			
			public String getName() {
				return name;
			}
			
			public double getAmmount() {
				return ammount;
			}
		}
		
		private final List<String> allergies;
		private final List<Prescription> prescriptions;
		
		public MedicalInformation() {
			this.allergies = new LinkedList<>();
			this.prescriptions = new LinkedList<>();
		}

		public List<String> getAllergies() {
			return allergies;
		}

		public List<Prescription> getPrescriptions() {
			return prescriptions;
		}
	}
	
	private Gender gender;
	private final LocalDate birthDate;
	private double height;
	private double weight;
	private final MedicalInformation medicalInformation;
	
	public Patient(String name, UUID id, InternetAddress email, Gender gender, LocalDate birthDate, double height, double weight) {
		super(name, id, email);
		this.setGender(gender);
		this.birthDate = birthDate;
		this.setWeight(weight);
		this.setHeight(height);
		this.medicalInformation = new MedicalInformation();
	}
	
	public Gender getGender() {
		return gender;
	}

	public void setGender(Gender gender) {
		this.gender = gender;
	}

	public LocalDate getBirthDate() {
		return birthDate;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}

	public MedicalInformation getMedicalInformation() {
		return medicalInformation;
	}

	public Period getAge() {
		return Period.between(this.getBirthDate(), LocalDate.now());
	}

}

@@ -205,18 +205,17 @@
 erson %7B%0A
-%09
 %0A
+
 %09public 
@@ -239,21 +239,17 @@
 ALE,
-%0A%09%09
+ 
 FEMALE,
-%0A%09%09
+ 
 OTHE
@@ -249,26 +249,25 @@
 E, OTHER%0A%09%7D%0A
-%09
 %0A
+
 %09public clas
@@ -289,19 +289,17 @@
 ation %7B%0A
-%09%09
 %0A
+
 %09%09public
@@ -383,20 +383,17 @@
 mmount;%0A
-%09%09%09
 %0A
+
 %09%09%09publi
@@ -489,28 +489,25 @@
 mount;%0A%09%09%09%7D%0A
-%09%09%09
 %0A
+
 %09%09%09public St
@@ -549,12 +549,9 @@
 %09%09%7D%0A
-%09%09%09
 %0A
+
 %09%09%09p
@@ -607,19 +607,17 @@
 %09%09%7D%0A%09%09%7D%0A
-%09%09
 %0A
+
 %09%09privat
@@ -702,11 +702,9 @@
 ns;%0A
-%09%09
 %0A
+
 %09%09pu
@@ -966,18 +966,17 @@
 %0A%09%09%7D%0A%09%7D%0A
-%09
 %0A
+
 %09private
@@ -1130,16 +1130,48 @@
 ation;%0A%09
+private final List%3CForm%3E forms;%0A
 %0A%09public
@@ -1238,17 +1238,20 @@
  gender,
- 
+%0A%09%09%09
 LocalDat
@@ -1287,24 +1287,84 @@
 ouble weight
+,%0A%09%09%09MedicalInformation medicalInformation, List%3CForm%3E forms
 ) %7B%0A%09%09super(
@@ -1521,13 +1521,9 @@
 n = 
-new M
+m
 edic
@@ -1539,17 +1539,36 @@
 tion
-()
+;%0A%09%09this.forms = forms
 ;%0A%09%7D%0A
-%09
 %0A
+
 %09pub
@@ -2025,24 +2025,24 @@
 rmation() %7B%0A
-
 %09%09return med
@@ -2058,24 +2058,76 @@
 mation;%0A%09%7D%0A%0A
+%09public List%3CForm%3E getForms() %7B%0A%09%09return forms;%0A%09%7D%0A%0A
 %09public Peri

add forms:List<Form> property