import datetime

from peewee import *

from src.model.BaseModel import BaseModel
from src.model.Group import Group


class GroupChat(BaseModel):
    """
    Group Chat class
    """

    group: Group | ForeignKeyField = ForeignKeyField(
        Group, backref="group_chats", on_delete="CASCADE", on_update="CASCADE"
    )
    tg_topic_id: int | IntegerField = IntegerField(null=True)  # Nullable for general group_chat
    tg_topic_name: str | CharField = CharField(
        null=True
    )  # Only for topics, it's the first name of the topic (even if it's changed)
    last_message_date: datetime.datetime | DateTimeField = DateTimeField(
        default=datetime.datetime.now
    )
    last_error_date: datetime.datetime | DateTimeField = DateTimeField(null=True)
    last_error_message: str | CharField = CharField(null=True)
    is_active: bool | BooleanField = BooleanField(default=True)
    is_muted: bool | BooleanField = BooleanField(default=False)
    auto_delete_duration: int | IntegerField = IntegerField(null=True)  # In minutes

    # Backref
    enabled_disabled_features = None
    enabled_features_pin = None

    class Meta:
        db_table = "group_chat"

    def get_full_name(self):
        """Get the full name of the group chat"""

        #  noinspection PyTypeChecker
        group: Group = self.group

        title = group.tg_group_name
        # Group is forum, add forum name if available
        if group.is_forum and self.tg_topic_name is not None:
            title += " - " + self.tg_topic_name

        return title


GroupChat.create_table()
