from django.db import models

# Create your models here.
# chatbot/models.py
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.conf import settings

class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError(_('The Email field must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))

        return self.create_user(email, password, **extra_fields)

class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(
        verbose_name=_("Email Address"),
        unique=True
    )
    name = models.CharField(
        verbose_name=_("Full Name"),
        max_length=150,
        blank=True,
        null=True
    )
    profile_photo = models.ImageField(
        verbose_name=_("Profile Photo"),
        upload_to="profile_photos/",
        blank=True,
        null=True,
        help_text=_("User's profile photo")
    )
    phone = models.CharField(
        verbose_name=_("Phone Number"),
        max_length=15,
        blank=True,
        null=True,
        help_text=_("User's phone number (e.g., +12345678901)")
    )
    last_seen = models.DateTimeField(
        verbose_name=_("Last Seen"),
        null=True,
        blank=True,
        help_text=_("Timestamp of the user's last activity (e.g., page load)")
    )
    default_language = models.CharField(
        verbose_name=_("Default Language"),
        max_length=10,
        choices=settings.LANGUAGES,
        default='en',
        help_text=_("User's preferred language for communications (e.g., emails)")
    )

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return f"{self.name} ({self.email})" if self.name else self.email




from django.db import models
from django.conf import settings

class Chatbot(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='chatbots')
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class File(models.Model):
    chatbot = models.ForeignKey(Chatbot, on_delete=models.CASCADE, related_name='files')
    file = models.FileField(upload_to='chatbot_files/%Y/%m/%d/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.chatbot.name} - {self.file.name}"

class RAGMetadata(models.Model):
    file = models.OneToOneField(File, on_delete=models.CASCADE, related_name='rag_metadata')
    chunk_count = models.PositiveIntegerField(default=0)
    processed_at = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=20, choices=[
        ('PENDING', 'Pending'),
        ('PROCESSING', 'Processing'),
        ('COMPLETED', 'Completed'),
        ('FAILED', 'Failed'),
    ], default='PENDING')
    error_message = models.TextField(blank=True, null=True)

    def __str__(self):
        return f"RAG for {self.file}"