from django.conf import settings
from django.contrib.auth.models import User
from django.core.validators import MinValueValidator
from django.db import models
from django.utils.translation import ugettext_lazy as _

from instances.models import Instance


class UserInstanceManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().select_related('instance', 'user')

class UserInstance(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    instance = models.ForeignKey(Instance, on_delete=models.CASCADE)
    is_change = models.BooleanField(default=False)
    is_delete = models.BooleanField(default=False)
    is_vnc = models.BooleanField(default=False)

    objects = UserInstanceManager()

    def __str__(self):
        return _('Instance "%(inst)s" of user %(user)s') % {"inst": self.instance, "user": self.user}

    class Meta:
        unique_together = ['user', 'instance']


class UserSSHKey(models.Model):
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
    keyname = models.CharField(_('key name'), max_length=25)
    keypublic = models.CharField(_('public key'), max_length=500)

    def __str__(self):
        return self.keyname


class UserAttributes(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    can_clone_instances = models.BooleanField(default=True)
    max_instances = models.IntegerField(_('max instances'),
                                        default=2,
                                        help_text=_("-1 for unlimited. Any integer value"),
                                        validators=[
                                            MinValueValidator(-1),
                                        ])
    max_cpus = models.IntegerField(
        _('max CPUs'),
        default=2,
        help_text=_("-1 for unlimited. Any integer value"),
        validators=[MinValueValidator(-1)],
    )
    max_memory = models.IntegerField(
        _('max memory'),
        default=2048,
        help_text=_("-1 for unlimited. Any integer value"),
        validators=[MinValueValidator(-1)],
    )
    max_disk_size = models.IntegerField(
        _('max disk size'),
        default=20,
        help_text=_("-1 for unlimited. Any integer value"),
        validators=[MinValueValidator(-1)],
    )

    def __str__(self):
        return self.user.username


class PermissionSet(models.Model):
    """
    Dummy model for holding set of permissions we need to be automatically added by Django
    """
    class Meta:
        default_permissions = ()
        permissions = (('change_password', _('Can change password')), )

        managed = False