from django.db import models
# from accounts import Users

import uuid







class TableList(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    table_name = models.CharField(max_length=255, unique=True)
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.table_name

class ColumnList(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    table = models.ForeignKey(TableList, on_delete=models.CASCADE, related_name="columns")
    column_name = models.CharField(max_length=255)
    column_id = models.CharField(max_length = 255)
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.table.table_name} - {self.column_name}"

class Options(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    table = models.ForeignKey(TableList, on_delete=models.CASCADE, null=True, blank=True, related_name="options")
    column = models.ForeignKey(ColumnList, on_delete=models.CASCADE, null=True, blank=True, related_name="options")
    option_value = models.CharField(max_length=255)

    def __str__(self):
        return f"{self.table.table_name if self.table else 'No Table'} - {self.column.column_name if self.column else 'No Column'} - {self.option_value}"


class RelatedOptionTable(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    option_value = models.CharField(max_length=255)

    def __str__(self):
        return self.option_value


class Chat_Data(models.Model):
    chat_id = models.UUIDField(
        primary_key=True, default=uuid.uuid4, unique=True, editable=False
    )
    chat_name = models.CharField(max_length=50, null=True, blank=True)

    chat_type = models.CharField(
        max_length=20,
        choices=[
            ("Welcome Message", "Welcome Message"),
            ("Related", "Related"),
            ("End Message", "End Message"),
        ],
        default="Welcome Message",
        null=True,
        blank=True,
    )
    message = models.TextField()
    related_chat = models.ForeignKey(
        'self', null=True, blank=True, on_delete=models.SET_NULL, related_name="related_chats"
    )
    # related_option_id = models.CharField(max_length=50, null=True, blank=True)
    related_option_id = models.ForeignKey(RelatedOptionTable, null=True, blank=True, on_delete=models.CASCADE, related_name="related_options")
    option_type = models.CharField(
        max_length=20,
        choices=[
            ("Custom", "Custom"),
            ("Table", "Table"),
        ],
        null=True,
        blank=True,
    )
    options = models.ManyToManyField(RelatedOptionTable, blank=True, null=True)
    # ✅ Ensure related_chat is a ForeignKey


    option_table = models.ForeignKey(
        'TableList', null=True, blank=True, on_delete=models.SET_NULL
    )
    option_column = models.ForeignKey(
        'ColumnList', null=True, blank=True, on_delete=models.SET_NULL
    )
    redirect = models.CharField(
        max_length=20,
        choices=[
            ("No", "No"),
            ("Yes", "Yes"),
        ],
        default="No",
        null=True,
        blank=True,
    )
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.chat_name} ({self.chat_type})"



class MapTables(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    map_name = models.CharField(max_length=255, unique=True)
    table_name = models.ForeignKey(TableList, on_delete = models.CASCADE)
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.map_name}_{self.table_name}"






