# Path: apps/games/models.py
# class Game(models.Model):
#     # Metadata.
#     name = models.CharField(max_length=200)
#     platform = models.ForeignKey(Platform, null=True, related_name='games')
# 
#     # Imagery.
#     image_art = models.ImageField('art', blank=True, upload_to='games',
#         help_text='16:9 art. Used for backgrounds, etc. Minimum size should be 1280x720.')
#     image_boxart = models.ImageField('boxart', blank=True, upload_to='games',
#         help_text='8:11 art akin to Twitch. Used for supplimentary display, lists, etc.')
# 
#     # Statuses.
#     is_abandoned = models.BooleanField('is abandoned?', default=False,
#         help_text='Has this game been abandoned for good?')
#     is_completed = models.BooleanField('is completed?', default=False,
#         help_text='Has this game been completed (if applicable).' )
# 
#     def __str__(self):
#         return '{}'.format(self.name)
# 
#     @staticmethod
#     def autocomplete_search_fields():
#         return ('name__exact', 'name__icontains')
# 
# Path: apps/broadcasts/models.py
# class Broadcast(models.Model):
#     # Metadata.
#     number = models.IntegerField(blank=True, null=True)
#     airdate = models.DateField(default=timezone.now)
#     status = models.CharField(blank=True, max_length=200,
#         help_text='Loosely related to Twitch\'s status field. Does not need to match. Will display on overlays.')
#     notes = models.TextField(blank=True)
# 
#     # Connections.
#     games = models.ManyToManyField(Game, related_name='appears_on')
#     series = models.ForeignKey(Series, blank=True, null=True, related_name='broadcasts',
#         help_text='Is this episode part of an ongoing series (i.e., "Whatever Wednesdays", etc.)?')
# 
#     # Statuses.
#     is_charity = models.BooleanField('is for charity?', default=False,
#         help_text='Is a charity fundraiser involved in this episode?')
#     is_marathon = models.BooleanField('is a marathon?', default=False,
#         help_text='Is this a marathon episode (longer than 12 hours)?')
# 
#     class Meta:
#         get_latest_by = 'airdate'
#         ordering = ['-airdate']
# 
#     def __str__(self):
#         return 'Episode {}'.format(self.number)
# 
#     def get_absolute_url(self):
#         return reverse('broadcast-detail', kwargs={'slug': self.number})
# 
# class Highlight(models.Model):
#     broadcast = models.ForeignKey(Broadcast, blank=True, null=True, related_name='highlights')
#     twid = models.CharField('Twitch ID', max_length=200,
#         help_text='The highlight\'s ID on Twitch; used for API calls, etc.')
# 
#     # Silly metadata (filled out by an API call).
#     title = models.CharField(blank=True, max_length=200)
#     description = models.TextField(blank=True)
#     url = models.URLField('URL', blank=True)
#     game = models.ForeignKey(Game, blank=True, null=True, related_name='highlited_on')
# 
#     class Meta:
#         ordering = ['-twid']
#         order_with_respect_to = 'broadcast'
# 
#     def save(self, *args, **kwargs):
#         # Grab our new highlight ID and run an API call.
#         import requests
#         endpoint = 'https://api.twitch.tv/kraken/videos/{}'.format(self.twid)
#         json = requests.get(endpoint).json()
# 
#         # Take the response and save it to the instance.
#         # But first, find the game, so we can save that.
#         if json['game']:
#             game = Game.objects.get(name=json['game'])
#             self.game = game
#         self.description = json['description']
#         self.title = json['title']
#         self.url = json['url']
#         super().save(*args, **kwargs)
# 
#     def __str__(self):
#         if not self.title:
#             return 'Highlight for {}'.format(self.broadcast)
#         return self.title
# 
# class Raid(models.Model):
#     broadcast = models.ForeignKey(Broadcast, blank=True, null=True, related_name='raids')
#     timestamp = models.DateTimeField(default=timezone.now,
#         help_text='When did it happen?')
#     username = models.CharField(blank=True, max_length=200)
# 
#     # Silly metadata.
#     game = models.CharField(blank=True, max_length=200,
#         help_text='The game the raider was playing at the time of raiding.')
# 
#     class Meta:
#         order_with_respect_to = 'broadcast'
#         ordering = ['timestamp']
# 
#     def __str__(self):
#         return '{}'.format(self.username)


from django.shortcuts import render
from django.views.generic import ListView, DetailView, TemplateView
from apps.games.models import Game
from .models import Broadcast, Highlight, Raid
# -*- coding: utf-8 -*-
from __future__ import division





class BroadcastDetailView(DetailView):
    model = Broadcast
    slug_field = 'number'


class BroadcastListView(ListView):
    model = Broadcast

    def calculate_highlights_per_episode(self, **kwargs):
        episodes = Broadcast.objects.count()
        highlights = Highlight.objects.count()
        return round((highlights / episodes), 2)

    def calculate_raids_per_episode(self, **kwargs):
        # Subtract 50 from the total number of episodes, since we only started
        # recording raids at episode 51.

# Path: apps/games/models.py
# class Game(models.Model):
#     # Metadata.
#     name = models.CharField(max_length=200)
#     platform = models.ForeignKey(Platform, null=True, related_name='games')
# 
#     # Imagery.
#     image_art = models.ImageField('art', blank=True, upload_to='games',
#         help_text='16:9 art. Used for backgrounds, etc. Minimum size should be 1280x720.')
#     image_boxart = models.ImageField('boxart', blank=True, upload_to='games',
#         help_text='8:11 art akin to Twitch. Used for supplimentary display, lists, etc.')
# 
#     # Statuses.
#     is_abandoned = models.BooleanField('is abandoned?', default=False,
#         help_text='Has this game been abandoned for good?')
#     is_completed = models.BooleanField('is completed?', default=False,
#         help_text='Has this game been completed (if applicable).' )
# 
#     def __str__(self):
#         return '{}'.format(self.name)
# 
#     @staticmethod
#     def autocomplete_search_fields():
#         return ('name__exact', 'name__icontains')
# 
# Path: apps/broadcasts/models.py
# class Broadcast(models.Model):
#     # Metadata.
#     number = models.IntegerField(blank=True, null=True)
#     airdate = models.DateField(default=timezone.now)
#     status = models.CharField(blank=True, max_length=200,
#         help_text='Loosely related to Twitch\'s status field. Does not need to match. Will display on overlays.')
#     notes = models.TextField(blank=True)
# 
#     # Connections.
#     games = models.ManyToManyField(Game, related_name='appears_on')
#     series = models.ForeignKey(Series, blank=True, null=True, related_name='broadcasts',
#         help_text='Is this episode part of an ongoing series (i.e., "Whatever Wednesdays", etc.)?')
# 
#     # Statuses.
#     is_charity = models.BooleanField('is for charity?', default=False,
#         help_text='Is a charity fundraiser involved in this episode?')
#     is_marathon = models.BooleanField('is a marathon?', default=False,
#         help_text='Is this a marathon episode (longer than 12 hours)?')
# 
#     class Meta:
#         get_latest_by = 'airdate'
#         ordering = ['-airdate']
# 
#     def __str__(self):
#         return 'Episode {}'.format(self.number)
# 
#     def get_absolute_url(self):
#         return reverse('broadcast-detail', kwargs={'slug': self.number})
# 
# class Highlight(models.Model):
#     broadcast = models.ForeignKey(Broadcast, blank=True, null=True, related_name='highlights')
#     twid = models.CharField('Twitch ID', max_length=200,
#         help_text='The highlight\'s ID on Twitch; used for API calls, etc.')
# 
#     # Silly metadata (filled out by an API call).
#     title = models.CharField(blank=True, max_length=200)
#     description = models.TextField(blank=True)
#     url = models.URLField('URL', blank=True)
#     game = models.ForeignKey(Game, blank=True, null=True, related_name='highlited_on')
# 
#     class Meta:
#         ordering = ['-twid']
#         order_with_respect_to = 'broadcast'
# 
#     def save(self, *args, **kwargs):
#         # Grab our new highlight ID and run an API call.
#         import requests
#         endpoint = 'https://api.twitch.tv/kraken/videos/{}'.format(self.twid)
#         json = requests.get(endpoint).json()
# 
#         # Take the response and save it to the instance.
#         # But first, find the game, so we can save that.
#         if json['game']:
#             game = Game.objects.get(name=json['game'])
#             self.game = game
#         self.description = json['description']
#         self.title = json['title']
#         self.url = json['url']
#         super().save(*args, **kwargs)
# 
#     def __str__(self):
#         if not self.title:
#             return 'Highlight for {}'.format(self.broadcast)
#         return self.title
# 
# class Raid(models.Model):
#     broadcast = models.ForeignKey(Broadcast, blank=True, null=True, related_name='raids')
#     timestamp = models.DateTimeField(default=timezone.now,
#         help_text='When did it happen?')
#     username = models.CharField(blank=True, max_length=200)
# 
#     # Silly metadata.
#     game = models.CharField(blank=True, max_length=200,
#         help_text='The game the raider was playing at the time of raiding.')
# 
#     class Meta:
#         order_with_respect_to = 'broadcast'
#         ordering = ['timestamp']
# 
#     def __str__(self):
#         return '{}'.format(self.username)


# Path: apps/broadcasts/views.py
from django.shortcuts import render
from django.views.generic import ListView, DetailView, TemplateView
from apps.games.models import Game
from .models import Broadcast, Highlight, Raid

# -*- coding: utf-8 -*-
from __future__ import division





class BroadcastDetailView(DetailView):
    model = Broadcast
    slug_field = 'number'


class BroadcastListView(ListView):
    model = Broadcast

    def calculate_highlights_per_episode(self, **kwargs):
        episodes = Broadcast.objects.count()
        highlights = Highlight.objects.count()
        return round((highlights / episodes), 2)

    def calculate_raids_per_episode(self, **kwargs):
        # Subtract 50 from the total number of episodes, since we only started
        # recording raids at episode 51.

        episodes = Broadcast.objects.count() - 50