# backend/users/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    SUPERUSER = 'superuser'
    DELTA_ADMIN = 'delta_admin'
    PARTNER_ADMIN = 'partner_admin'
    VISITOR = 'visitor'
    
    ROLE_CHOICES = [
        (SUPERUSER, 'Super User'),
        (DELTA_ADMIN, 'Delta Administrator'),
        (PARTNER_ADMIN, 'Partner Administrator'),
        (VISITOR, 'Visitor'),
    ]
    
    email = models.EmailField(unique=True)
    role = models.CharField(max_length=20, choices=ROLE_CHOICES, default=VISITOR)
    # Add these new fields
    phone = models.CharField(max_length=20, blank=True, null=True)
    address = models.TextField(blank=True, null=True)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
    
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']
    
    def is_superuser_role(self):
        return self.role == self.SUPERUSER
        
    def is_delta_admin(self):
        return self.role == self.DELTA_ADMIN
        
    def is_partner_admin(self):
        return self.role == self.PARTNER_ADMIN
        
    def is_visitor(self):
        return self.role == self.VISITOR
    
 # Add this to your existing models.py file
    
class Partner(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True, null=True)
    logo = models.ImageField(upload_to='partners/', blank=True, null=True)
    website = models.URLField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
        
    # Link to the Delta admin who manages this partner
    managed_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='managed_partners')
        
    def __str__(self):
        return self.name
    
# Add this to your existing models.py file
    
class PartnerAdmin(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='partner_profile')
    partner = models.ForeignKey(Partner, on_delete=models.CASCADE, related_name='administrators')
        
    def __str__(self):
        return f"{self.user.username} - {self.partner.name} Admin"
