namespace draft.iteration2;

class User{
  abstract;
  class Admin{};
  class Registrant{};
  unique String emailAddress;
  String password;
}

class Registrant{
  String name;
  Integer emergencyContact;    
}

class Admin{
  1<@>- * Assignment assignments;
}

class Member{
  isA Registrant;
  Boolean hireGuide;
  Integer numberOfWeeks;
  Boolean hotelStay;
  1 -> * Equipment equipmentWanted;
  1 -> * Bundle bundlesWanted;
  }

class MountainGuide{
  Integer weeklyCost;
  0..1 -- * Assignment guideHired;
  isA Registrant;
}

class ClimbingWeek{
  * -- 1 Assignment assignedWeek;
}

class Equipment{
  Integer pricePerWeek;
  Double weight;
}

class Bundle{
  1 -> 2..* Equipment equipmentInBundle;
  String name;
  Double percentageDiscount;
}

class Hotel{
  enum StarRating{1,2,3,4,5}
  StarRating starRating;
  String name;
  String address;
  0..1 assignedHotel -- * Assignment;
}

class Assignment{
  Integer totalCost;
  * -- 1 Member;
}

namespace -;


class User
{
  position 290 4 164.844 93.7109;
}

class Admin
{
  position 236 163 109 42.9688;
  position.association Admin__Assignment:assignments 51,43 82,0;
}

class Registrant
{
  position 608 147 156.66 77.4609;
}

class Member
{
  position 524 388 194.277 94.707;
  position.association Equipment:equipmentWanted__Member 37,95 87,0;
  position.association Bundle:bundlesWanted__Member 159,95 136,0;
}

class MountainGuide
{
  position 759 306 159.902 60.2148;
  position.association Assignment:guideHired__MountainGuide 0,18 145,39;
}

class ClimbingWeek
{
  position 41 308 118.125 42.9688;
  position.association Assignment:assignedWeek__ClimbingWeek 119,20 0,26;
}

class Equipment
{
  position 336 593 174.258 77.4609;
}

class Bundle
{
  position 690 594 214.395 77.4609;
  position.association Bundle__Equipment:equipmentInBundle 0,36 175,39;
}

class Hotel
{
  position 91 427 157.688 92.3594;
  position.association Assignment__Hotel:assignedHotel 128,44 19,60;
}

class Assignment
{
  position 289 298 143.945 60.2148;
  position.association Assignment__Member 122,58 0,36;
}
