# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#     * Rearrange models' order
#     * Make sure each model has one field with primary_key=True
# Feel free to rename the models, but don't rename db_table values
# or field names.
#
# Also note: You'll have to insert the output of
# 'django-admin.py sqlcustom [appname]'into your database.
#
# Original Amavis version : 2.6.2

from datetime import datetime

from django.db import models
from django.utils.translation import gettext_lazy


class Maddr(models.Model):
    partition_tag = models.IntegerField(default=0)
    id = models.BigIntegerField(primary_key=True)  # NOQA:A003
    email = models.CharField(max_length=255)
    domain = models.CharField(max_length=255)

    class Meta:
        db_table = "maddr"
        unique_together = [("partition_tag", "email")]
        managed = False


class Mailaddr(models.Model):
    id = models.IntegerField(primary_key=True)  # NOQA:A003
    priority = models.IntegerField()
    email = models.CharField(unique=True, max_length=255)

    class Meta:
        db_table = "mailaddr"
        managed = False


class Msgs(models.Model):
    partition_tag = models.IntegerField(default=0)
    mail_id = models.BinaryField(max_length=16, primary_key=True)
    secret_id = models.BinaryField()
    am_id = models.CharField(max_length=60)
    time_num = models.IntegerField()
    time_iso = models.CharField(max_length=48)
    sid = models.ForeignKey(Maddr, db_column="sid", on_delete=models.CASCADE)
    policy = models.CharField(max_length=765, blank=True)
    client_addr = models.CharField(max_length=765, blank=True)
    size = models.IntegerField()
    originating = models.CharField(max_length=3)
    content = models.CharField(max_length=1, blank=True)
    quar_type = models.CharField(max_length=1, blank=True)
    quar_loc = models.CharField(max_length=255, blank=True)
    dsn_sent = models.CharField(max_length=3, blank=True)
    spam_level = models.FloatField(null=True, blank=True)
    message_id = models.CharField(max_length=765, blank=True)
    from_addr = models.CharField(max_length=765, blank=True)
    subject = models.CharField(max_length=765, blank=True)
    host = models.CharField(max_length=765)

    class Meta:
        db_table = "msgs"
        managed = False
        unique_together = ("partition_tag", "mail_id")

    @property
    def time_datetime(self) -> datetime:
        return datetime.fromtimestamp(self.time_num)


class Msgrcpt(models.Model):
    partition_tag = models.IntegerField(default=0)
    mail = models.ForeignKey(Msgs, primary_key=True, on_delete=models.CASCADE)
    rid = models.ForeignKey(Maddr, db_column="rid", on_delete=models.CASCADE)
    rseqnum = models.IntegerField(default=0)
    is_local = models.CharField(max_length=3)
    content = models.CharField(max_length=3)
    ds = models.CharField(max_length=3)
    rs = models.CharField(max_length=3)
    bl = models.CharField(max_length=3, blank=True)
    wl = models.CharField(max_length=3, blank=True)
    bspam_level = models.FloatField(null=True, blank=True)
    smtp_resp = models.CharField(max_length=765, blank=True)

    class Meta:
        db_table = "msgrcpt"
        managed = False
        unique_together = ("partition_tag", "mail", "rseqnum")


class Policy(models.Model):
    policy_name = models.CharField(max_length=32, blank=True)
    virus_lover = models.CharField(max_length=3, blank=True, null=True)
    spam_lover = models.CharField(max_length=3, blank=True, null=True)
    unchecked_lover = models.CharField(max_length=3, blank=True, null=True)
    banned_files_lover = models.CharField(max_length=3, blank=True, null=True)
    bad_header_lover = models.CharField(max_length=3, blank=True, null=True)
    bypass_virus_checks = models.CharField(
        gettext_lazy("Virus filter"),
        default="",
        null=True,
        choices=(
            ("N", gettext_lazy("yes")),
            ("Y", gettext_lazy("no")),
            ("", gettext_lazy("default")),
        ),
        max_length=3,
        help_text=gettext_lazy(
            "Bypass virus checks or not. Choose 'default' to use global " "settings."
        ),
    )
    bypass_spam_checks = models.CharField(
        gettext_lazy("Spam filter"),
        default="",
        null=True,
        choices=(
            ("N", gettext_lazy("yes")),
            ("Y", gettext_lazy("no")),
            ("", gettext_lazy("default")),
        ),
        max_length=3,
        help_text=gettext_lazy(
            "Bypass spam checks or not. Choose 'default' to use global " "settings."
        ),
    )
    bypass_banned_checks = models.CharField(
        gettext_lazy("Banned filter"),
        default="",
        null=True,
        choices=(
            ("N", gettext_lazy("yes")),
            ("Y", gettext_lazy("no")),
            ("", gettext_lazy("default")),
        ),
        max_length=3,
        help_text=gettext_lazy(
            "Bypass banned checks or not. Choose 'default' to use global " "settings."
        ),
    )
    bypass_header_checks = models.CharField(max_length=3, blank=True, null=True)
    virus_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    spam_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    banned_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    unchecked_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    bad_header_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    clean_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    archive_quarantine_to = models.CharField(max_length=192, blank=True, null=True)
    spam_tag_level = models.FloatField(null=True, blank=True)
    spam_tag2_level = models.FloatField(null=True, blank=True)
    spam_tag3_level = models.FloatField(null=True, blank=True)
    spam_kill_level = models.FloatField(null=True, blank=True)
    spam_dsn_cutoff_level = models.FloatField(null=True, blank=True)
    spam_quarantine_cutoff_level = models.FloatField(null=True, blank=True)
    addr_extension_virus = models.CharField(max_length=192, blank=True, null=True)
    addr_extension_spam = models.CharField(max_length=192, blank=True, null=True)
    addr_extension_banned = models.CharField(max_length=192, blank=True, null=True)
    addr_extension_bad_header = models.CharField(max_length=192, blank=True, null=True)
    warnvirusrecip = models.CharField(max_length=3, blank=True, null=True)
    warnbannedrecip = models.CharField(max_length=3, blank=True, null=True)
    warnbadhrecip = models.CharField(max_length=3, blank=True, null=True)
    newvirus_admin = models.CharField(max_length=192, blank=True, null=True)
    virus_admin = models.CharField(max_length=192, blank=True, null=True)
    banned_admin = models.CharField(max_length=192, blank=True, null=True)
    bad_header_admin = models.CharField(max_length=192, blank=True, null=True)
    spam_admin = models.CharField(max_length=192, blank=True, null=True)
    spam_subject_tag = models.CharField(max_length=192, blank=True, null=True)
    spam_subject_tag2 = models.CharField(
        gettext_lazy("Spam marker"),
        default=None,
        max_length=192,
        blank=True,
        null=True,
        help_text=gettext_lazy(
            "Modify spam subject using the specified text. "
            "Choose 'default' to use global settings."
        ),
    )
    spam_subject_tag3 = models.CharField(max_length=192, blank=True, null=True)
    message_size_limit = models.IntegerField(null=True, blank=True)
    banned_rulenames = models.CharField(max_length=192, blank=True, null=True)
    disclaimer_options = models.CharField(max_length=192, blank=True, null=True)
    forward_method = models.CharField(max_length=192, blank=True, null=True)
    sa_userconf = models.CharField(max_length=192, blank=True, null=True)
    sa_username = models.CharField(max_length=192, blank=True, null=True)

    class Meta:
        db_table = "policy"
        managed = False


class Quarantine(models.Model):
    partition_tag = models.IntegerField(default=0)
    mail = models.ForeignKey(Msgs, primary_key=True, on_delete=models.CASCADE)
    chunk_ind = models.IntegerField()
    mail_text = models.BinaryField()

    class Meta:
        db_table = "quarantine"
        managed = False
        ordering = ["-mail__time_num"]
        unique_together = ("partition_tag", "mail", "chunk_ind")


class Users(models.Model):
    id = models.AutoField(primary_key=True)  # NOQA:A003
    priority = models.IntegerField()
    policy = models.ForeignKey(Policy, on_delete=models.CASCADE)
    email = models.CharField(unique=True, max_length=255)
    fullname = models.CharField(max_length=765, blank=True)

    class Meta:
        db_table = "users"
        managed = False


class Wblist(models.Model):
    rid = models.IntegerField(primary_key=True)
    sid = models.IntegerField()
    wb = models.CharField(max_length=30)

    class Meta:
        db_table = "wblist"
        managed = False
        unique_together = [("rid", "sid")]
