from django.contrib.auth.models import AbstractUser
from django.core.exceptions import ValidationError
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField


def validate_uae_phone(value):
    """Validate that the phone number is a UAE (+971) number."""
    if value and not str(value).startswith("+971"):
        raise ValidationError("Only UAE phone numbers (+971) are allowed.")


class User(AbstractUser):
    """Custom user model with phone-based auth and Firebase integration."""

    firebase_uid = models.CharField(max_length=128, unique=True, db_index=True, null=True, blank=True)
    phone_number = PhoneNumberField(
        unique=True, null=True, blank=True, region="AE", validators=[validate_uae_phone]
    )
    full_name = models.CharField(max_length=120, blank=True)
    avatar = models.ImageField(upload_to="avatars/", null=True, blank=True)
    language = models.CharField(
        max_length=2, choices=[("en", "English"), ("ar", "Arabic")], default="en"
    )
    notifications_enabled = models.BooleanField(default=True)
    is_guest = models.BooleanField(default=False)

    REQUIRED_FIELDS = ["phone_number"]

    class Meta:
        db_table = "users"

    def __str__(self):
        return self.phone_number.as_e164 if self.phone_number else self.username
