from operator import attrgetter

import arrow
from ics import Calendar

EVENT_KEYS = ("begin", "end", "all_day", "name", "description", "location")


def parse_ical(source):
    """Parses iCalendar source and returns events as list of dicts"""
    cal = Calendar(source)
    events = []
    for event in sorted(cal.events, key=attrgetter("begin"), reverse=True):
        events.append({key: getattr(event, key) for key in EVENT_KEYS})
    return events


def split_events(events):
    """Splits events and returns list of past events and future events"""
    now = arrow.utcnow()
    past = [ev for ev in events if ev["begin"] < now]
    future = [ev for ev in events if ev["begin"] > now]
    return past, future