import recurrent
# import traceback
from dateutil import rrule
from datetime import datetime
# from pyscript import display
import json
import js


async def get_occurences(event):
    next_dates = []
    parsed_value = ''
    try:
        inputValue = js.localStorage.getItem("recurrentInputValue")
        if inputValue == None or inputValue == "":
            js.localStorage.setItem("recurrentParsedValue", "")
            return
        inputValue = json.loads(inputValue)
        frequency = inputValue.get('frequency', '').lower()
        eventDate = inputValue.get('eventDate')
        if eventDate:
            eventDate = datetime.strptime(eventDate, "%Y-%m-%d")

        recurrenceDate = datetime.now()
        if eventDate:
            recurrenceDate = eventDate

        rr = recurrent.RecurringEvent(now_date=recurrenceDate)

        if frequency == 'weekly':
            frequency = 'every week'
        if frequency == 'biweekly':
            frequency = 'every 2 weeks'
        if frequency == 'monthly':
            frequency = 'every month'
        if frequency == 'quarterly':
            frequency = 'every 3 months'
        if frequency == 'yearly':
            frequency = 'every year'

        if 'starting' not in frequency:
            frequency = f'{frequency} starting {recurrenceDate.strftime('%d %b %Y')}'

        rr.parse(frequency)
        startDate = datetime.now()
        if startDate < recurrenceDate:
            startDate = recurrenceDate
        recurrence = rrule.rrulestr(rr.get_RFC_rrule())
 
        next_dates = recurrence.xafter(count=3, dt=startDate, inc=True)
        parsed_value = json.dumps({
            'rrule': rr.get_RFC_rrule(),
            'next_dates': [
                occurrence.isoformat() for occurrence in next_dates
            ]
        })
    except:
        # js.console.log(traceback.format_exc())
        js.localStorage.setItem("recurrentParsedValue", "Error")
        return

    js.localStorage.setItem("recurrentParsedValue", parsed_value)
