# Django imports
from django.db import models

# Module imports
from plane.db.models import ProjectBaseModel


class Inbox(ProjectBaseModel):
    name = models.CharField(max_length=255)
    description = models.TextField(verbose_name="Inbox Description", blank=True)
    is_default = models.BooleanField(default=False)
    view_props = models.JSONField(default=dict)

    def __str__(self):
        """Return name of the Inbox"""
        return f"{self.name} <{self.project.name}>"

    class Meta:
        unique_together = ["name", "project"]
        verbose_name = "Inbox"
        verbose_name_plural = "Inboxes"
        db_table = "inboxes"
        ordering = ("name",)


class InboxIssue(ProjectBaseModel):
    inbox = models.ForeignKey(
        "db.Inbox", related_name="issue_inbox", on_delete=models.CASCADE
    )
    issue = models.ForeignKey(
        "db.Issue", related_name="issue_inbox", on_delete=models.CASCADE
    )
    status = models.IntegerField(
        choices=((-2, "Pending"), (-1, "Rejected"), (0, "Snoozed"), (1, "Accepted"), (2, "Duplicate")),
        default=-2,
    )
    snoozed_till = models.DateTimeField(null=True)
    duplicate_to = models.ForeignKey(
        "db.Issue", related_name="inbox_duplicate", on_delete=models.SET_NULL, null=True
    )
    source = models.TextField(blank=True, null=True)

    class Meta:
        verbose_name = "InboxIssue"
        verbose_name_plural = "InboxIssues"
        db_table = "inbox_issues"
        ordering = ("-created_at",)

    def __str__(self):
        """Return name of the Issue"""
        return f"{self.issue.name} <{self.inbox.name}>"
