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

# from magazineapp.models import MagazineCategory
# Create your models here.
class Role(models.Model):
    ADMIN = 1
    SUBADMIN = 2
    PUBLISHER = 3
    SUBPUBLISHER = 4
    USER = 5
    ROLE_CHOICES = [(ADMIN, 'ADMIN'),(SUBADMIN, 'SUBADMIN'),(PUBLISHER, 'PUBLISHER'),(SUBPUBLISHER, 'SUBPUBLISHER'),(USER, 'USER'),]
    role = models.CharField(max_length=50,null=False)

    class Meta:
        db_table = "user_roles"

    def __str__(self):
        return self.role


class Country(models.Model):
    sortname = models.CharField(max_length=20)
    name = models.CharField(max_length=20)
    country_code = models.CharField(max_length=15,null=True,blank=True)
    commission = models.CharField(max_length=5,null=True,blank=True)
    currency_symbol = models.CharField(max_length=5,null=True,blank=True)
    currency_code = models.CharField(max_length=5,null=True,blank=True)

    class Meta:
        db_table = "country_user"

    # def __str__(self) -> str:
    #     return self.name

# user model
class User(AbstractUser):
    email = models.EmailField(max_length=100,null=True, blank=True)
    roles = models.ForeignKey(Role, on_delete=models.CASCADE, null=True, blank=True)
    phone_number = models.CharField(max_length=15,null=True,blank=True,unique=True)
    country_code = models.CharField(max_length=15,null=True,blank=True)
    created_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    created_by = models.CharField(max_length=100,null=True,blank=True)
    first_login = models.BooleanField(default=False)
    status = models.BooleanField(default=True)
    otp = models.CharField(max_length=10,null=True, blank=True)
    exp_otp_datetime = models.DateTimeField(null=True, blank=True)
    updated_on = models.DateTimeField(auto_now=True)
    email_varification = models.BooleanField(default=False)
    phone_varification = models.BooleanField(default=False)
    device_token = models.CharField(max_length=200,null=True, blank=True)
    device_id = models.CharField(max_length=200,null=True, blank=True)
    fcm_token = models.CharField(max_length=300,null=True, blank=True)
    social_login_type = models.CharField(max_length=100,null=True,blank=True)
    description = models.CharField(max_length=250,null=True,blank=True)
    profile_pic = models.FileField(upload_to='profile_pic/',null=True,blank=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True)
    otp_varification = models.BooleanField(default=False)
    uid = models.CharField(max_length=200,null=True,blank=True)
    type = models.CharField(max_length=20,null=True,blank=True)
    start_date = models.DateField(null=True,blank=True)
    end_date = models.DateField(null=True,blank=True)
    address = models.CharField(max_length=250,null=True,blank=True)
    address_line_2 = models.CharField(max_length=250,null=True,blank=True)
    state = models.CharField(max_length=50,null=True,blank=True)
    zipcode = models.CharField(max_length=6,null=True,blank=True)
    city = models.CharField(max_length=50,null=True,blank=True)
    country_name = models.CharField(max_length=50,null=True,blank=True)

    def __str__(self):
        return "{}" .format(self.email)
    class Meta:
        db_table = "master_user"
        indexes = [
            models.Index(fields=['email','roles']),
        ]


# class MgPurchaseRentDate(models.Model):
#     days = models.CharField(max_length=5,null=True,blank=True)
#     status = models.BooleanField(default=True)


# subscriptionstype days model
class SubscriptionType(models.Model):
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True)
    subscription_type = models.CharField(max_length=20,null=True,blank=True)
    days = models.CharField(max_length=10,null=True,blank=True)
    price = models.FloatField(null=True,blank=True)
    discount = models.CharField(max_length=20,null=True,blank=True)
    subscription_status = models.BooleanField(default=True)
    type = models.CharField(max_length=10,null=True,blank=True)
    description = models.CharField(max_length=1000,null=True,blank=True)
    per_month_price = models.FloatField(null=True,blank=True)
    created_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    create_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    updated_on = models.DateTimeField(auto_now=True, blank=True,null=True)
    class Meta:
        db_table = "Subscription_day_Type"
        unique_together = ("subscription_type", "country")
        indexes = [
            models.Index(fields=['country',]),
        ]

# magazine subscription model
class Subscription(models.Model):
    users = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    subscription = models.ForeignKey(SubscriptionType, on_delete=models.CASCADE, null=True, blank=True)
    subscription_type = models.CharField(max_length=100,null=True,blank=True)
    name = models.CharField(max_length=100,null=True,blank=True)
    price = models.FloatField(null=True,blank=True)
    start_date = models.DateField(null=True,blank=True)
    end_date = models.DateField(null=True,blank=True)
    # duration = models.DurationField(null=True,blank=True)
    subscription_status = models.BooleanField(default=False)
    save_percentage = models.CharField(max_length=50,null=True,blank=True)
    per_month_price = models.CharField(max_length=200,null=True,blank=True)
    description = models.CharField(max_length=250,null=True,blank=True)
    created_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    updated_on = models.DateTimeField(auto_now=True)
    
    class Meta:
        db_table = "user_subscription"
        indexes = [
            models.Index(fields=['users']),
        ]

#sub-publisher model 
class SubPublisherUser(models.Model):
   users =  models.ForeignKey(User, on_delete=models.CASCADE,null=True, blank=True,related_name='master_user')
   created_by =  models.ForeignKey(User, on_delete=models.CASCADE,null=True, blank=True,related_name='created_by_user')
   
   class Meta:
        db_table = "Sub_Publisher_User"
        indexes = [
            models.Index(fields=['users']),
        ]

# Master currency model
class MasterCurrency(models.Model):
    country_code = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True)
    currency = models.CharField(max_length=20,null=True,blank=True)
    currency_status = models.BooleanField(default=False)
    is_deleted = models.BooleanField(default=False)
    created_on = models.DateTimeField(auto_now_add=True,null=True,blank=True)
    updated_on = models.DateTimeField(auto_now=True,null=True,blank=True)

    class Meta:
        db_table = "Master_Currency"
        indexes = [
            models.Index(fields=['country_code','currency',])
        ]

# payment get way model
class PaymentGetWay(models.Model):
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True) 
    getway_commission = models.CharField(max_length=5,null=True,blank=True)
    created_on = models.DateTimeField(auto_now_add=True,null=True,blank=True)
    updated_on = models.DateTimeField(auto_now=True,null=True,blank=True)

    class Meta:
        db_table = "Payment_Get_Way"
        indexes = [
            models.Index(fields=['country','getway_commission',]),
        ]

# contacts us model
class ContactsUs(models.Model):
    user =  models.ForeignKey(User,on_delete=models.CASCADE,null=True, blank=True)
    first_name = models.CharField(max_length=20,null=True,blank=True)
    email = models.EmailField(max_length=100,null=True, blank=True)
    phone_number = models.CharField(max_length=15,null=True,blank=True)
    message = models.TextField(max_length=500,null=True,blank=True)
    created_on = models.DateTimeField(auto_now_add=True,null=True,blank=True)
    updated_on = models.DateTimeField(auto_now=True,null=True,blank=True)

    class Meta:
        db_table = "contacts_us"
        indexes = [
            models.Index(fields=['user',]),
        ]

# notification model
class Notification(models.Model):
    user =  models.ForeignKey(User,on_delete=models.CASCADE,null=True, blank=True)
    message = models.TextField(max_length=500,null=True,blank=True)
    read = models.BooleanField(default=False)
    created_on = models.DateTimeField(auto_now_add=True,null=True,blank=True)
    updated_on = models.DateTimeField(auto_now=True,null=True,blank=True)

    class Meta:
        db_table = "user_notification"
        indexes = [
            models.Index(fields=['user',]),
        ]

##### UserRent model
class UserRent(models.Model):
    users = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=100,null=True,blank=True)
    price = models.FloatField(null=True,blank=True)
    rent_status = models.BooleanField(default=False)
    created_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    updated_on = models.DateTimeField(auto_now=True)
    validity = models.CharField(max_length=10,null=True,blank=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True)

    class Meta:
        db_table = "user_rent"
        indexes = [
            models.Index(fields=['users','name']),
        ]

### RentForCountry model
class RentForCountry(models.Model):
    rent = models.ForeignKey(UserRent, on_delete=models.CASCADE, null=True, blank=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True)
    created_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    updated_on = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "country_for_rent"
        indexes = [
            models.Index(fields=['rent','country']),
        ]

### UserAddress model

class UserAddress(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,null=True,blank=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, blank=True)
    address1 = models.CharField(max_length=250,null=True,blank=True)
    address2 = models.CharField(max_length=250,null=True,blank=True)
    created_on = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    updated_on = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "user_address"
        indexes = [
            models.Index(fields=['user']),
        ]
    


