# Generated by Django 2.0 on 2018-04-01 15:11

from django.db import migrations
from django.utils import timezone

import pytz


def localize_event_datetimes(apps, schema_editor):
    Event = MyModel = apps.get_model("events", "Event")
    for event in Event.objects.all():
        utc_tz = pytz.timezone("UTC")
        event_tz = get_event_timezone(event)
        print("Converting event %s to %s" % (event.id, event_tz))
        event.start_time = utc_tz.localize(
            timezone.make_naive(
                event_tz.localize(timezone.make_naive(event.start_time, pytz.utc))
            )
        )
        event.end_time = utc_tz.localize(
            timezone.make_naive(
                event_tz.localize(timezone.make_naive(event.end_time, pytz.utc))
            )
        )
        event.save()


def localize_commonevent_datetimes(apps, schema_editor):
    CommonEvent = MyModel = apps.get_model("events", "CommonEvent")
    for event in CommonEvent.objects.all():
        utc_tz = pytz.timezone("UTC")
        event_tz = get_event_timezone(event)
        print("Converting common event %s to %s" % (event.id, event_tz))
        event.start_time = utc_tz.localize(
            timezone.make_naive(
                event_tz.localize(timezone.make_naive(event.start_time, pytz.utc))
            )
        )
        event.end_time = utc_tz.localize(
            timezone.make_naive(
                event_tz.localize(timezone.make_naive(event.end_time, pytz.utc))
            )
        )
        event.save()


def get_event_timezone(event):
    if event.place is not None:
        return pytz.timezone(event.place.tz)
    elif hasattr(event, "team") and event.team is not None:
        return pytz.timezone(event.team.tz)
    elif hasattr(event, "city") and event.city is not None:
        return pytz.timezone(event.city.tz)
    else:
        return pytz.timezone("UTC")


class Migration(migrations.Migration):

    dependencies = [("events", "0021_add_account_secret")]

    operations = [
        migrations.RunPython(
            localize_event_datetimes, reverse_code=migrations.RunPython.noop
        ),
        migrations.RunPython(
            localize_commonevent_datetimes, reverse_code=migrations.RunPython.noop
        ),
    ]