import yaml

import dateutil.parser
import datetime
import logging
import logging.config
from gcal_sync import (
    CalendarConverter,
    GoogleCalendarService,
    GoogleCalendar,
    CalendarSync
)


def load_config():
    with open('config.yml', 'r', encoding='utf-8') as f:
        result = yaml.load(f)
    return result


def get_start_date(date_str):
    result = datetime.datetime(1,1,1)
    if 'now' == date_str:
        result = datetime.datetime.utcnow()
    else:
        result = dateutil.parser.parse(date_str)
    return result


def main():
    config = load_config()

    if 'logging' in config:
        logging.config.dictConfig(config['logging'])

    calendarId = config['calendar']['google_id']
    ics_filepath = config['calendar']['source']
    srv_acc_file = config['service_account']

    start = get_start_date(config['start_from'])

    converter = CalendarConverter()
    converter.load(ics_filepath)

    service = GoogleCalendarService.from_srv_acc_file(srv_acc_file)
    gcalendar = GoogleCalendar(service, calendarId)

    sync = CalendarSync(gcalendar, converter)
    sync.prepare_sync(start)
    sync.apply()

if __name__ == '__main__':
    main()