# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""

from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver


class Profile(models.Model):
    class Gender(models.TextChoices):
        gender_1 = '1', '--'
        gender_2 = '2', 'Male'
        gender_3 = '3', 'Female'

    class Race(models.TextChoices):
        race_1 = '1', '--'
        race_2 = '2', 'Black'
        race_3 = '3', 'White'
        race_4 = '4', 'Other'

    class Province(models.TextChoices):
        province_0 = '0', '--'
        province_1 = 'EC', 'Eastern Cape'
        province_2 = 'FS', 'Free State'
        province_3 = 'GP', 'Gauteng'
        province_4 = 'ZN', 'KwaZulu-Natal'
        province_5 = 'LP', 'Limpopo'
        province_6 = 'MP', 'Mpumalanga'
        province_7 = 'NC', 'Northern Cape'
        province_8 = 'NW', 'North-West'
        province_9 = 'WC', 'Western Cape'

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email_confirmed = models.BooleanField(default=False)
    terms_accepted = models.BooleanField(default=False)

    gender = models.CharField(max_length=1, choices=Gender.choices, blank=True)
    race = models.CharField(max_length=1, choices=Race.choices, blank=True)

    phone_number = models.CharField(max_length=15, blank=True)
    birthday = models.DateField(null=True, blank=True)

    city = models.CharField(max_length=100, blank=True)
    province = models.CharField(max_length=2, blank=True, choices=Province.choices)
    postal_code = models.CharField(max_length=10, null=True, blank=True)

    profile_photo = models.ImageField(upload_to='profile_photos', default=None, null=True)
    cover_photo = models.ImageField(upload_to='cover_photos', default=None, null=True)

    def location(self):
        return ', '.join(
            [
                str(x)
                for x in [
                    self.city,
                    self.get_province_display(),
                ]
                if x not in ('', '--')
            ]
        )


@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()
