# Generated by Django 3.0.2 on 2020-04-25 20:45

import logging
from django.db import migrations
from django.utils.dateparse import parse_date

from nefarious.tmdb import get_tmdb_client


def populate_release_date(apps, schema_editor):

    WatchMovie = apps.get_model('nefarious', 'WatchMovie')
    WatchTVEpisode = apps.get_model('nefarious', 'WatchTVEpisode')
    WatchTVSeason = apps.get_model('nefarious', 'WatchTVSeason')
    NefariousSettings = apps.get_model('nefarious', 'NefariousSettings')

    nefarious_settings = NefariousSettings.objects.all().first()
    if not nefarious_settings:  # skip if no settings exist
        return

    tmdb_client = get_tmdb_client(nefarious_settings)

    logging.info('Adding release dates')

    for media in WatchMovie.objects.all():
        try:
            movie_result = tmdb_client.Movies(media.tmdb_movie_id)
            data = movie_result.info()
            release_date = parse_date(data.get('release_date', ''))
            update_release_date(media, release_date)
        except Exception as e:
            logging.exception(e)

    for media in WatchTVSeason.objects.all():
        try:
            season_result = tmdb_client.TV_Seasons(media.watch_tv_show.tmdb_show_id, media.season_number)
            data = season_result.info()
            release_date = parse_date(data.get('air_date', ''))
            update_release_date(media, release_date)
        except Exception as e:
            logging.exception(e)

    for media in WatchTVEpisode.objects.all():
        try:
            episode_result = tmdb_client.TV_Episodes(media.watch_tv_show.tmdb_show_id, media.season_number, media.episode_number)
            data = episode_result.info()
            release_date = parse_date(data.get('air_date', ''))
            update_release_date(media, release_date)
        except Exception as e:
            logging.exception(e)


def update_release_date(media, release_date):
    if release_date:
        logging.info('Adding release date {} for {}'.format(release_date, media))
        media.release_date = release_date
        media.save()
    else:
        logging.warning('Skipping empty release date for {}'.format(media))


class Migration(migrations.Migration):

    dependencies = [
        ('nefarious', '0054_auto_20200425_2109'),
    ]

    operations = [
        migrations.RunPython(populate_release_date),
    ]