from django.contrib.auth.models import AbstractUser
from django.db import models


class User(AbstractUser):
    STUDENT = 'student'
    TEACHER = 'teacher'
    ADMIN = 'admin'
    SUPER_ADMIN = 'super_admin'

    ROLE_CHOICES = [
        (STUDENT, 'Student'),
        (TEACHER, 'Teacher'),
        (ADMIN, 'Admin'),
        (SUPER_ADMIN, 'Super Admin'),
    ]

    role = models.CharField(max_length=20, choices=ROLE_CHOICES, default=STUDENT)
    phone = models.CharField(max_length=20, blank=True)
    profile_photo = models.ImageField(upload_to='profile_photos/', blank=True, null=True)
    is_verified = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = 'User'
        verbose_name_plural = 'Users'

    def __str__(self):
        return f"{self.get_full_name() or self.username} ({self.get_role_display()})"

    def is_student(self):
        return self.role == self.STUDENT

    def is_teacher(self):
        return self.role == self.TEACHER

    def is_admin_user(self):
        return self.role in [self.ADMIN, self.SUPER_ADMIN]

    def is_super_admin(self):
        return self.role == self.SUPER_ADMIN

    def get_dashboard_url(self):
        if self.is_student():
            return '/student/dashboard/'
        elif self.is_teacher():
            return '/teacher/dashboard/'
        return '/admin-portal/dashboard/'

    @property
    def unread_notification_count(self):
        return self.notifications.filter(is_read=False).count()

    @property
    def recent_notifications(self):
        return self.notifications.all()[:5]
