from django.db import models
from auth_apis.models import *
from django.conf import settings
from admin_panel.models import *
# Create your models here.


class StoreRequests(models.Model):
    first_name = models.CharField(max_length=255,null=True)
    last_name = models.CharField(max_length=255,null=True)
    address = models.CharField(max_length=255,null=True)
    email = models.CharField(max_length=100,null=True)
    isd_code = models.CharField(max_length=10,null=True)
    mobile_number = models.CharField(max_length=16,null=True)
    id_number = models.CharField(max_length=50,null=True)
    bank_name = models.CharField(max_length=255,null=True)
    bank_account_number = models.CharField(max_length=50,null=True)
    id_picture = models.CharField(max_length=255,null=True)
    status = models.IntegerField(default=0,null=True,max_length=10)
    message = models.TextField(null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "store_requests"



class Stores(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    store_name_english = models.CharField(max_length=255,null=True)
    store_name_arabic = models.CharField(max_length=255,null=True)
    store_description_english = models.TextField(null=True)
    store_description_arabic = models.TextField(null=True)
    store_number = models.CharField(max_length=20,null=True)
    store_email = models.CharField(max_length=255,null=True)
    country = models.CharField(max_length=244,null=True)
    address = models.CharField(max_length=255,null=True)
    status = models.BooleanField(default=True,null=True)
    store_logo =  models.CharField(default=str(settings.BASE_URL)+"/media/storeLogo/default.png",max_length=244,null=True)
    store_banner =  models.CharField(default=str(settings.BASE_URL)+"/media/storeLogo/default.png",max_length=244,null=True)
    is_profile_completed = models.BooleanField(default=0,null=True)
    is_vip = models.CharField(max_length=50,default='false',null=True)
    ratings = models.IntegerField(default=0,null=True)
    start_date = models.DateTimeField(null=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'stores'


class Products(models.Model):
    product_name_english = models.CharField(max_length=255,null=True)
    product_name_arabic = models.CharField(max_length=255,null=True)
    maincategory = models.ForeignKey(MainCategories,on_delete=models.CASCADE)
    subcategory =  models.ForeignKey(Subcategories,on_delete=models.CASCADE)
    description_english = models.TextField(null=True)
    description_arabic = models.TextField(null=True)
    brand = models.ForeignKey(Brands,on_delete=models.CASCADE)
    stone = models.ForeignKey(Stones,on_delete=models.CASCADE,null=True)
    model_name = models.CharField(max_length=100,null=True)
    size = models.CharField(max_length=50,null=True)
    weight = models.CharField(max_length=50,null=True)
    color = models.CharField(max_length=100,null=True)
    quantity = models.CharField(max_length=50,null=True)
    price = models.IntegerField(max_length=50,null=True)
    price_discount = models.IntegerField(max_length=50,default=None,null=True)
    images = models.TextField(null=True,default=[str(settings.BASE_URL)+"/media/category/place_holder.png"])
    store = models.ForeignKey(Stores,on_delete=models.CASCADE)
    status = models.BooleanField(default=True,null=True)
    offer_discount = models.CharField(max_length=50,null=True,default='')
    is_offer_applied = models.BooleanField(default=False)
    today_deal_start_date = models.DateTimeField(null=True)
    rating = models.IntegerField(default=0,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)


    class Meta:
        db_table = 'products'

    def clean(self):
        if self.price_discount:
            self.price_discount = self.price_discount.strip()



class storeServices(models.Model):
    serviceId = models.ForeignKey(Services,on_delete=models.CASCADE)
    store = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'store_services'
    
class ServiceModel(models.Model):
    store = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    service_model_english = models.CharField(max_length=100,null=True)
    service_model_arabic = models.CharField(max_length=100,null=True)
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'service_models'

class StoneType(models.Model):
    store = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    stone_type_english = models.CharField(max_length=100,null=True)
    stone_type_arabic = models.CharField(max_length=100,null=True)
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'stone_types'


class ServiceType(models.Model):
    store = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    service_type_english = models.CharField(max_length=100,null=True)
    service_type_arabic = models.CharField(max_length=100,null=True)
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'service_type'

class GiftBoxType(models.Model):
    store = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    box_name_english = models.CharField(max_length=100,null=True)
    box_name_arabic = models.CharField(max_length=100,null=True)
    box_image =  models.CharField(default=str(settings.BASE_URL)+"/media/category/place_holder.png",max_length=244,null=True)
    box_cost = models.CharField(max_length=100,null=True)
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'gift_box_type'


class GiftPackingType(models.Model):
    store = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    packaging_name_english = models.CharField(max_length=100,null=True)
    packaging_name_arabic = models.CharField(max_length=100,null=True)
    packaging_image =  models.CharField(default=str(settings.BASE_URL)+"/media/category/place_holder.png",max_length=244,null=True)
    packaging_cost = models.CharField(max_length=100,null=True)
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateField(null=True)
    
    class Meta:
        db_table = 'gift_packaging_type'


class ServiceRequests(models.Model):
    store  = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    serviceId = models.ForeignKey(Services,on_delete=models.CASCADE)
    customer = models.ForeignKey(Buyer,on_delete=models.CASCADE,null=True)
    stone_type =  models.ForeignKey(StoneType,on_delete=models.CASCADE,null=True) 
    size = models.CharField(max_length=100,null=True)
    shape = models.CharField(max_length=100,null=True)
    amount = models.CharField(max_length=100,null=True)
    notes = models.TextField(null=True)
    image= models.TextField(null=True)
    number_of_stones = models.CharField(max_length=100,null=True)
    weight_of_stone = models.CharField(max_length=100,null=True)
    service_type = models.ForeignKey(ServiceType,on_delete=models.CASCADE,null=True)
    service_model = models.ForeignKey(ServiceModel,on_delete=models.CASCADE,null=True)
    gift_box = models.ForeignKey(GiftBoxType,null=True,on_delete=models.CASCADE)
    gift_packaging = models.ForeignKey(GiftPackingType,null=True,on_delete=models.CASCADE)
    gift_card_sentence = models.CharField(max_length=100,null=True)
    status = models.BooleanField(default=True,null=True)
    service_status = models.IntegerField(default=0,null=True)
    payment_status = models.IntegerField(default=0,null=True)
    delivery_status = models.IntegerField(default=0,null=True)
    invoice_generated = models.BooleanField(default=0,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'service_requests'



class StoreNotifications(models.Model):
    message = models.TextField(null=True)
    store = models.ForeignKey(Stores,on_delete=models.CASCADE)
    is_read = models.BooleanField(default=False,null=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "store_notifications"


class StoreCoupons(models.Model):
    coupon_name_english = models.CharField(max_length=100,null=True)
    coupon_name_arabic = models.CharField(max_length=100,null=True)
    coupon_type =  models.CharField(max_length=100,null=True)
    coupon_discount = models.IntegerField(max_length=10,null=True)
    coupon_on = models.CharField(max_length=100,null=True)
    product = models.ForeignKey(Products,on_delete=models.CASCADE,null=True)
    service = models.ForeignKey(Services,on_delete=models.CASCADE,null=True)
    category_product = models.ForeignKey(MainCategories,on_delete=models.CASCADE,null=True)
    coupon_start_date = models.DateTimeField(null=True)
    coupon_end_date = models.DateTimeField(null=True)
    store_id = models.ForeignKey(Stores,on_delete=models.CASCADE)
    isApplicable = models.BooleanField(default=False)
    status = models.BooleanField(default=False)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)


    class Meta:
        db_table = "store_coupons"


class ServiceInvoice(models.Model):
    service_request_id = models.ForeignKey(ServiceRequests,on_delete=models.CASCADE)
    store  = models.ForeignKey(Stores,on_delete=models.CASCADE,null=True)
    invoice_number = models.CharField(max_length=100,default='')
    customer_name = models.CharField(max_length=100,default='')
    english_service_name = models.CharField(max_length=200,default='')
    arabic_service_name = models.CharField(max_length=200,default='')
    quantity = models.CharField(max_length=20,default='') 
    description = models.TextField(default='')
    unit_price = models.CharField(max_length=30,default='')
    total_before_vat = models.CharField(max_length=30,default='')
    vat_amount = models.CharField(max_length=30,default='')
    total_amount = models.CharField(max_length=30,default='')
    qr_code = models.FileField(max_length=250,default='')
    invoice_pdf_url = models.CharField(max_length=250,default='')
    is_paid = models.BooleanField(default=False,null=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "service_invoice"
