from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, User
from django.conf import settings


# Create your models here.



class AboutPage(models.Model):
    # General Info
    title = models.CharField(max_length=200, default="About GreatKart")
    subtitle = models.CharField(max_length=300, default="Your trusted partner in online shopping excellence.")
    
    # Hero Image
    hero_image = models.ImageField(upload_to='about/', blank=True, null=True)

    # Our Story
    story_title = models.CharField(max_length=200, default="Our Story")
    story_text1 = models.TextField()
    story_text2 = models.TextField()
    story_image = models.ImageField(upload_to='about/', blank=True, null=True)

    # Mission
    mission_title = models.CharField(max_length=200, default="Our Mission")
    mission_text = models.TextField()

    # Core Values
    value1_title = models.CharField(max_length=100)
    value1_text = models.TextField()
    value2_title = models.CharField(max_length=100)
    value2_text = models.TextField()
    value3_title = models.CharField(max_length=100)
    value3_text = models.TextField()

    # Team
    team_section_title = models.CharField(max_length=200, default="Meet Our Team")
    team_member1_name = models.CharField(max_length=100)
    team_member1_role = models.CharField(max_length=100)
    team_member1_image = models.ImageField(upload_to='about/team/', blank=True, null=True)
    
    team_member2_name = models.CharField(max_length=100)
    team_member2_role = models.CharField(max_length=100)
    team_member2_image = models.ImageField(upload_to='about/team/', blank=True, null=True)
    
    team_member3_name = models.CharField(max_length=100)
    team_member3_role = models.CharField(max_length=100)
    team_member3_image = models.ImageField(upload_to='about/team/', blank=True, null=True)

    # Call to Action
    cta_title = models.CharField(max_length=200)
    cta_subtitle = models.CharField(max_length=300)

    def __str__(self):
        return "About Page Content"



class MyAccountManager(BaseUserManager):
    def create_user(self, first_name, last_name, username, email, password=None, **extra_fields):
        if not email:
            raise ValueError('User must have an email address')

        if not username:
            raise ValueError('User must have an username')

        user = self.model(
            email = self.normalize_email(email),
            username = username,
            first_name = first_name,
            last_name = last_name,
            **extra_fields
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password=None, **extra_fields):
        extra_fields.setdefault('first_name', 'Admin')
        extra_fields.setdefault('last_name', 'User')
        extra_fields.setdefault('is_admin', True)
        extra_fields.setdefault('is_active', True)
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(
            email=email,
            username=username,
            password=password,
            **extra_fields
        )


class Account(AbstractBaseUser, PermissionsMixin):
    first_name      = models.CharField(max_length=50)
    last_name       = models.CharField(max_length=50)
    username        = models.CharField(max_length=50, unique=True)
    email           = models.EmailField(max_length=100, unique=True)
    phone_number    = models.CharField(max_length=50)

    # required
    date_joined     = models.DateTimeField(auto_now_add=True)
    last_login      = models.DateTimeField(auto_now_add=True)
    is_admin        = models.BooleanField(default=False)
    is_staff        = models.BooleanField(default=False)
    is_active        = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name']

    objects = MyAccountManager()

    def full_name(self):
        return f'{self.first_name} {self.last_name}'

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, add_label):
        return True


class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    address_line_1 = models.CharField(blank=True, max_length=100)
    address_line_2 = models.CharField(blank=True, max_length=100)
    profile_picture = models.ImageField(upload_to='profile_pictures/')


    city = models.CharField(blank=True, max_length=20)
    state = models.CharField(blank=True, max_length=20)
    country = models.CharField(blank=True, max_length=20)

    def __str__(self):
        return self.user.first_name

    def full_address(self):
        return f'{self.address_line_1} {self.address_line_2}'
