from django.conf import settings
from django.contrib.auth.models import User
from django.core.mail import send_mail
from django.db import models
from django.utils.crypto import get_random_string
from imagekit.models import ImageSpecField
from pilkit.processors import ResizeToFill, ResizeToFit


# Create your models here.

def get_unique_code():
    # TODO: Add check for codes already in use
    code = get_random_string(length=8)
    return code

class TimeStampMixin(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True


class Administrator(TimeStampMixin):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    sent_welcome_email = models.BooleanField(default=False)


class Organisation(TimeStampMixin):
    name = models.CharField(max_length=255)
    admins = models.ManyToManyField(Administrator, related_name='organisations')
    staff = models.ManyToManyField("carers.Profile", related_name='organisations', blank=True)
    email = models.EmailField(unique=True)
    unique_code = models.CharField(max_length=200, default=get_unique_code)
    parent = models.ForeignKey("self", null=True, blank=True, on_delete=models.SET_NULL, related_name='children')
    logo_thumbnail = ImageSpecField(source='logo',
                                      processors=[ResizeToFit(110, 110)],
                                      format='WEBP',
                                      options={'quality': 90}
                                      )

    logo = models.ImageField(upload_to='logos', null=True, blank=True)
    sent_welcome_email = models.BooleanField(default=False)

    def __str__(self):
        return self.name





class StaffLinkRequest(TimeStampMixin):
    profile = models.ForeignKey("carers.Profile", on_delete=models.CASCADE)
    organisation = models.ForeignKey(Organisation, on_delete=models.CASCADE)