class Event:
    id = 0
    name = ""
    location_name = []
    location_coordinates = []
    description = ""
    reviews = []
    category = []
    weather_requirements = 0
    date = ""
    image_path = "fallback.jpg"
    duration = "" # datetime object
    trip_to = "" # Trip object
    trip_back = ""

    def __init__(self, **kwargs):
        self.id = kwargs.pop("id")
        self.name = kwargs.pop("name")
        self.location_name = kwargs.pop("location_name")
        self.location_coordinates = kwargs.pop("location_coordinates")
        self.date = kwargs.pop("date")
        self.description = kwargs.pop("description")

    
    def find_optimal_trip(self):
        pass
    
    def add_review(self, **kwargs):
        self.reviews.append(Review(**kwargs))


    @property
    def trip_is_good(self):
        pass

    @property
    def co2_savings(self):
        try:
            return self.trip_to.co2_savings + self.trip_back.co2_savings
        except:
            return 5
    @property
    def rating(self):
        return int(sum([r.rating for r in self.reviews]) / len(self.reviews))

    @property
    def nreviews(self):
        return len(self.reviews)


class Review:
    text = ""
    rating = 0 # max 5
    additional_photos = []


    def __init__(self, text, rating) -> None:
        self.text = text
        self.rating = rating


    def add_photo(self, photo):
        pass

class Events:
    _events = []

    def add_event(self, **kwargs):
        self._events.append(Event(**kwargs))

    def get_by_id(self, id):
        for e in self._events:
            if e.id == id:
                return e
        return None

    def __iter__(self):
        return iter(self._events)