# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
from django.utils.timezone import now
from rosmorport_tsts.settings import *
import pytils
import random


class TbPetsClones(models.Model):
    """Модель для хранения клонов питомцев"""
    class PetType(models.IntegerChoices):
        """Тип питомца"""
        DOG = 1, "Собачка"
        CAT = 2, "Кошечка"
        BIR = 3, "Птичка"
        FIS = 6, "Рыбка"
        ROD = 4, "Грызун"
        REP = 5, "Рептилия"
        OTH = 0, "Неизвестная зверушка"

    class PetSex(models.IntegerChoices):
        """Пол питомца"""
        MA = 1, "Мужской"
        FE = 2, "Женский"
        UN = 0, "Неизвестно"

    iPetType = models.SmallIntegerField(
        default=PetType.OTH,
        choices=PetType.choices,
        db_index=True,
        verbose_name="Тип питомца"
    )
    szPetName = models.CharField(
        max_length=64,
        verbose_name="Имя образца",
        help_text="Имя исходного биологического объекта, с которого изготовлен клон"
    )
    szPetSerNum = models.CharField(
        max_length=27,
        db_index=True,
        unique=True,
        null=True,
        blank=True,
        verbose_name="Серийный номер",
        help_text="Серийный номер клонированного питомца<br />"
                  "Можно не заполнять. Номер будет сгенерирован автоматически"
    )
    iPetSex = models.SmallIntegerField(
        default=PetSex.UN,
        choices=PetSex.choices,
        db_index=True,
        verbose_name="Пол питомца"
    )
    bPetIsAlive = models.BooleanField(
        default=True,
        db_index=True,
        verbose_name="Клон жив"
    )
    szPetOwner = models.CharField(
        max_length=64,
        null=True,
        blank=True,
        verbose_name="Владелец",
        help_text="Владелец клонированного питомца"
    )
    szPetPrice = models.DecimalField(
        max_digits=10,
        decimal_places=2,
        default=random.randint(1000, 10000),
        null=True,
        blank=True,
        verbose_name="Цена",
        help_text="Цена  клонированного питомца (в рублях)"
    )
    szPetComment = models.TextField(
        null=True,
        blank=True,
        verbose_name="Комментарии",
        help_text='Дополнительная информация о клоне'

    )
    bPetIsReg = models.BooleanField(
        default=True,
        db_index=True,
        verbose_name="Регистрация",
        help_text="Поставьте галочку, если клон нужно зарегистрировать в Минсельхозе и Министерстве здравоохранения"
    )
    dtPetCreate = models.DateTimeField(
        auto_now_add=True,  # надо указать False при миграции, после вернуть в True
        # для выполнения миграций нужно добавлять default, а после она не нужна
        verbose_name="Дата Создания"
    )
    dtPetTimeStamp = models.DateTimeField(
        auto_now=True,  # надо указать False при миграции, после вернуть в True
        # для выполнения миграций нужно добавлять default, а после она не нужна
        verbose_name="Штамп времени"
    )

    def __unicode__(self):
        return f"{self.szPetName} - {self.szPetSerNum}"

    def __str__(self):
        return self.__unicode__()

    def save(self, *args, **kwargs):
        if self.szPetName == "":
            # если имя не задано, то генерируем его
            self.szPetName = (f"{chr(random.randint(65, 90))}"
                              f"{chr(random.randint(65, 90))}"
                              f"{chr(random.randint(65, 90))}-anonymous")
        if not self.pk:
            # если объект новый, то генерируем серийный номер
            self.szPetSerNum = (f"{str(pytils.translit.slugify(self.szPetName)[:3].upper())}"
                                f"-{self.iPetType:02d}"
                                f"-{self.iPetSex:02d}"
                                f"-{now().strftime('%y%m%d-%H%M%S')}"
                                f"_{now().strftime('%f')[0:2]}")
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        # запрет на удаление записи
        return

    class Meta:
        verbose_name = "Клон питомца"
        verbose_name_plural = "Клоны питомцев"
        db_table = "tb_pets_clones"
        ordering = ["-id",]