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)