from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils.translation import gettext_lazy as _

from judge.models.profile import Profile


class Ticket(models.Model):
    title = models.CharField(max_length=100, verbose_name=_("ticket title"))
    user = models.ForeignKey(
        Profile,
        verbose_name=_("ticket creator"),
        related_name="tickets",
        on_delete=models.CASCADE,
    )
    time = models.DateTimeField(verbose_name=_("creation time"), auto_now_add=True)
    assignees = models.ManyToManyField(
        Profile, verbose_name=_("assignees"), related_name="assigned_tickets"
    )
    notes = models.TextField(
        verbose_name=_("quick notes"),
        blank=True,
        help_text=_("Staff notes for this issue to aid in processing."),
    )
    content_type = models.ForeignKey(
        ContentType, verbose_name=_("linked item type"), on_delete=models.CASCADE
    )
    object_id = models.PositiveIntegerField(verbose_name=_("linked item ID"))
    linked_item = GenericForeignKey()
    is_open = models.BooleanField(verbose_name=_("is ticket open?"), default=True)


class TicketMessage(models.Model):
    ticket = models.ForeignKey(
        Ticket,
        verbose_name=_("ticket"),
        related_name="messages",
        related_query_name="message",
        on_delete=models.CASCADE,
    )
    user = models.ForeignKey(
        Profile,
        verbose_name=_("poster"),
        related_name="ticket_messages",
        on_delete=models.CASCADE,
    )
    body = models.TextField(verbose_name=_("message body"))
    time = models.DateTimeField(verbose_name=_("message time"), auto_now_add=True)