from django.db import models
from django.contrib.auth.models import User

# Create your models here.
# User.add_to_class('profiles',  models.FileField(upload_to='uploads/', null=True, blank=True, default="../static/dummy.png"))




class Profiles(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='user_profiles')

    name = models.CharField(max_length=255, null=True)
    phone = models.CharField(max_length=255, null=True)
    email = models.CharField(max_length=255, null=True)
    address = models.CharField(max_length=255, null=True)
    servicename = models.CharField(max_length=255, null=True)
    
    gender = models.CharField(max_length=255, null=True)
    profiles = models.FileField(upload_to='uploads/', null=True, blank=True, default="../static/dummy.png")

    password = models.CharField(max_length=255, null=True)
    gstnumber = models.CharField(max_length=255, null=True)
    pincode = models.CharField(max_length=255, null=True)


    doj = models.DateField(null=True)
    
    gst = models.FileField(upload_to='uploads/', null=True, blank=True)
    companylogo = models.FileField(upload_to='uploads/', null=True, blank=True)
    alteremail = models.CharField(max_length=255, null=True)
    alteremail1 = models.CharField(max_length=255, null=True)
    alteremail2 = models.CharField(max_length=255, null=True)


    pan = models.FileField(upload_to='uploads/', null=True, blank=True)
    role = models.SmallIntegerField(default=0)



    status = models.SmallIntegerField(default=1)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'profile'


class Otp(models.Model):
    email = models.CharField(max_length=255, null=True)
    status = models.SmallIntegerField(default=1)
    otp = models.CharField(max_length=6, blank=True)
    otp_created_at = models.DateTimeField(blank=True, null=True)

    class Meta:
        db_table = 'otp'
        ordering = ['pk']



class Product(models.Model):
    name = models.CharField(max_length=255, null=True)
    code = models.CharField(max_length=255, null=True)

    specification = models.TextField(null=True)
    sfile = models.FileField(upload_to='uploads/', null=True, blank=True)

    description = models.TextField(null=True)
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True,
                                   related_name='product_created_by')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True,
                                   related_name='product_updated_by')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'product'
        ordering = ['pk']


class Vendor(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='user_vendors')

    vendorname = models.CharField(max_length=255, null=True)
    address = models.CharField(max_length=255, null=True)
    phone = models.CharField(max_length=255, null=True)
    email = models.CharField(max_length=255, null=True)
    pincode= models.CharField(max_length=255, null=True)
    state = models.CharField(max_length=255, null=True)
    city = models.CharField(max_length=255, null=True)
    country = models.CharField(max_length=255, null=True)
    gst = models.CharField(max_length=255, null=True)
    accountnumber = models.CharField(max_length=255, null=True)
    accountname = models.CharField(max_length=255, null=True)
    ifsc = models.CharField(max_length=255, null=True)
    pan = models.CharField(max_length=255, null=True)
    bankname= models.CharField(max_length=255, null=True)
    vendor_company_name= models.CharField(max_length=255, null=True)
    plan= models.CharField(max_length=255, null=True)
    plan_details = models.CharField(max_length=255, null=True)
    registered_date= models.DateField(null=True)
    remarks = models.CharField(max_length=255, null=True)

    branch= models.CharField(max_length=255, null=True)
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True,
                                   related_name='vendor_created_by')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True,
                                   related_name='vendor_updated_by')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'vendor'
        ordering = ['pk']



class Enquiry(models.Model):
    deliverydate =  models.CharField(max_length=255, null=True)
    product = models.JSONField(blank=True, null=True)   
    vendor = models.JSONField(blank=True, null=True)
    units = models.JSONField(blank=True, null=True)
    quantity =  models.JSONField(blank=True, null=True)
    description =  models.JSONField(blank=True, null=True)

    deliverylocation = models.JSONField(blank=True, null=True)
    end_date =  models.CharField(max_length=255, null=True)
    end_time =  models.CharField(max_length=255, null=True)
    auto_id = models.IntegerField(null=True)

    expirestatus = models.SmallIntegerField(default=1)
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_enquiry')
    updated_by = models.TextField(null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'enquiry'
        ordering = ['pk']


class Vendorquote(models.Model):
    enquiry = models.ForeignKey(Enquiry, on_delete=models.CASCADE, null=True, blank=True)
    vendor = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    product =  models.JSONField(blank=True, null=True)
    rateperUnit =  models.JSONField(blank=True, null=True)
    transportCost =  models.JSONField(blank=True, null=True)
    packingCost =  models.JSONField(blank=True, null=True)
    gst =  models.JSONField(blank=True, null=True)
    requote_date =  models.CharField(max_length=255, null=True)


    total =  models.JSONField(blank=True, null=True)



    totalAmount =  models.CharField(max_length=255, null=True)
    requoteamount =  models.CharField(max_length=255, null=True)
    reason = models.TextField(null=True)


    enquirystatus = models.SmallIntegerField(default=1)
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_vendorquote')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_vendorquote')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'vendorquote'
        ordering = ['pk']



class Quotelog(models.Model):
    enquiry = models.ForeignKey(Enquiry, on_delete=models.CASCADE, null=True, blank=True)
    vendor = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    product =  models.JSONField(blank=True, null=True)
    rateperUnit =  models.JSONField(blank=True, null=True)
    transportCost =  models.JSONField(blank=True, null=True)
    packingCost =  models.JSONField(blank=True, null=True)
    gst =  models.JSONField(blank=True, null=True)
    requote_date =  models.CharField(max_length=255, null=True)


    total =  models.JSONField(blank=True, null=True)



    totalAmount =  models.CharField(max_length=255, null=True)
    requoteamount =  models.CharField(max_length=255, null=True)

    reason = models.TextField(null=True)


    enquirystatus = models.SmallIntegerField(default=0)
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_quotelog')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_quotelog')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'quotelog'
        ordering = ['pk']


class Auction(models.Model):
    en_id = models.ForeignKey(Enquiry, on_delete=models.CASCADE, null=True, blank=True)
    duration = models.CharField(max_length=255, null=True)
    end_date =  models.CharField(max_length=255, null=True)
    end_time =  models.CharField(max_length=255, null=True)
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_auction')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_auction')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'auction'
        ordering = ['pk']

class Ticket(models.Model):
    en_id = models.ForeignKey(Enquiry, on_delete=models.CASCADE, null=True, blank=True)
    subject = models.CharField(max_length=255, null=True)
    description = models.TextField(null=True)

    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_ticket')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_ticket')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'ticket'
        ordering = ['pk']


class Ticketlog(models.Model):
    ticket_id = models.ForeignKey(Ticket, on_delete=models.CASCADE, null=True, blank=True)
    description = models.TextField(null=True)

    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_ticketlog')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_ticketlog')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'ticketlog'
        ordering = ['pk']


class Policy(models.Model):
    content = models.TextField(null=True)
    
    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_policy')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_policy')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'policy'
        ordering = ['pk']




class Message(models.Model):
    enq_id = models.ForeignKey(Enquiry, on_delete=models.CASCADE, null=True, blank=True)
    message = models.CharField(max_length=255, null=True)
    username = models.CharField(max_length=255, null=True)
    total = models.CharField(max_length=255, null=True)

    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_message')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_message')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'message'
        ordering = ['pk']

class Auctionlog(models.Model):
    enq_id = models.ForeignKey(Enquiry, on_delete=models.CASCADE, null=True, blank=True)
    message = models.CharField(max_length=255, null=True)
    username = models.CharField(max_length=255, null=True)
    total = models.CharField(max_length=255, null=True)
    percentage = models.CharField(max_length=255, null=True)


    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_auctionlog')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_auctionlog')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'auctionlog'
        ordering = ['pk']

class Notification(models.Model):
    
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='Notifications')
    type = models.CharField(max_length=20)
    message = models.TextField()
    status = models.SmallIntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'notification'
        ordering = ['pk']


class Payment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='payments')
    payment_amount = models.CharField(max_length=255, null=True)
    payment_date = models.DateField(auto_now_add=True)
    payment_status = models.CharField(max_length=255, null=True)

    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_payments')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_payments')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'payment'
        ordering = ['pk']

class Paymenthistory(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='paymenthistory')
    payment_amount = models.CharField(max_length=255, null=True)
    payment_date = models.DateField(auto_now_add=True)
    payment_status = models.CharField(max_length=255, null=True)

    status = models.SmallIntegerField(default=1)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='created_paymenthistory')
    updated_by = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='updated_paymenthistory')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'paymenthistory'
        ordering = ['pk']








