import os

from django.db import models
from django.utils import timezone

from haugebot_web import twitch_api
from .managers import TwitchUserManager


class Setting(models.Model):
    wusstest_du_schon_prefix = models.CharField(max_length=50, verbose_name="Präfix")
    wusstest_du_schon_loop = models.PositiveIntegerField(verbose_name="Pause (in Minuten)")


class TwitchColor(models.Model):
    twitch_name = models.CharField(max_length=20)
    display_name = models.CharField(max_length=20)
    color = models.CharField(max_length=7)


class WusstestDuSchon(models.Model):
    command = models.CharField(max_length=20)
    text = models.TextField(max_length=450)
    use_prefix = models.BooleanField(default=True, verbose_name="Präfix verwenden")
    active = models.BooleanField(default=True, verbose_name="Aktiv")


class Pipimeter(models.Model):
    user = models.CharField(max_length=25, unique=True)


class TwitchUser(models.Model):
    objects = TwitchUserManager()

    id = models.BigIntegerField(primary_key=True)
    login = models.CharField(max_length=50)
    access_token = models.CharField(max_length=50)
    refresh_token = models.CharField(max_length=50)
    last_login = models.DateTimeField(null=True)
    admin = models.BooleanField(default=False)

    def update_tokens(self, access_token, refresh_token):
        self.access_token = access_token
        self.refresh_token = refresh_token
        self.save()

    @property
    def is_authenticated(self):
        return self.is_broadcaster or self.is_admin or self.is_mod

    @property
    def is_broadcaster(self):
        return self.id == int(os.getenv("BROADCASTER_ID"))

    @property
    def is_admin(self):
        return self.admin

    @property
    def is_mod(self):
        try:
            broadcaster = TwitchUser.objects.get(pk=int(os.getenv("BROADCASTER_ID")))
            return twitch_api.is_mod(self, broadcaster)
        except TwitchUser.DoesNotExist:
            return False


class Whisper(models.Model):
    author = models.TextField(max_length=50)
    content = models.TextField(max_length=500)
    received_at = models.DateTimeField(default=timezone.now)