from datetime import datetime, date, timedelta, timezone
import recurring_ical_events
import requests
from copy import deepcopy
from icalendar import Calendar, Event
import locale
import sys


#This is duplicated code from calendar-fetcher-main.py
def split_multiday_events(events):
    """
    Split multi-day events into separate daily events.
    
    Args:
        events: Iterator of iCal events
        
    Returns:
        List of events where multi-day events are split into daily events
    """
    split_events = []
    
    for event in events:
        # Get start and end dates
        start = event.get('dtstart').dt
        end = event.get('dtend').dt if event.get('dtend') else start
        
        # Convert datetime to date if needed
        if isinstance(start, datetime):
            start = start.date()
        if isinstance(end, datetime):
            end = end.date()
            
        # If it's a single day event or not a date/datetime, add as is
        if not isinstance(start, date) or not isinstance(end, date) or start == end:
            split_events.append(event)
            continue
            
        # For multi-day events, create separate events for each day
        current_date = start
        while current_date < end:
            # Create a copy of the original event
            daily_event = Event()
            for key in event:
                daily_event[key] = deepcopy(event[key])

            
            # Update the date for this instance
            daily_event['dtstart'].dt = current_date

            if 'dtend' in daily_event:
                daily_event['dtend'].dt = current_date + timedelta(days=1)
                
            split_events.append(daily_event)
            current_date += timedelta(days=1)
    return split_events


def get_events(ics_url):
    # Set German locale
    locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
    
    response = requests.get(ics_url)
    calendar = Calendar.from_ical(response.content)

    now=datetime.now(timezone.utc) # + timedelta(days=1)

    raw_events = split_multiday_events(recurring_ical_events.of(calendar).after(now))

    now_date = now.date()
    now_datetime = now
    events = []
    for raw_event in raw_events:
        start = raw_event.get('dtstart').dt
        if isinstance(start, datetime):
            my_now = now_datetime
        else:
             my_now = now_date
        if start >= my_now:
            events.append(raw_event)
    return events
