from django.db import models
from django.contrib.auth.models import User
import uuid
# Create your models here.
# User.add_to_class('profiles',  models.FileField(upload_to='uploads/', null=True, blank=True, default="../static/dummy.png"))


from decimal import Decimal


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)

    course = models.CharField(max_length=100, blank=True, null=True)
    batch = models.CharField(max_length=50, blank=True, null=True, default="Morning")


    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'

PROPERTY_TYPE_CHOICES = (
    ("residential_land", "Residential Land"),
    ("commercial_land", "Commercial Land"),
    ("plot", "Plot"),
    ("house", "House / Villa"),
    ("apartment", "Apartment"),
    ("agricultural_land", "Agricultural Land"),
    ("farm_land", "Farm Land"),
)


class Property(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='properties')

    title = models.CharField(max_length=255, null=True, blank=True)
    place_name = models.CharField(max_length=120, null=True, blank=True)
    district = models.CharField(max_length=120, null=True, blank=True)
    full_address = models.TextField(null=True, blank=True)
    map_link = models.CharField(max_length=500, null=True, blank=True)

    property_type = models.CharField(max_length=40, null=True, blank=True)
    land_area = models.CharField(max_length=100, null=True, blank=True)  # e.g. "2400 Sq.Ft" or "1.5 Acres"

    price = models.DecimalField(max_digits=14, decimal_places=2, null=True, blank=True)
    price_display = models.CharField(max_length=100, null=True, blank=True)

    description = models.TextField(null=True, blank=True)
    short_description = models.CharField(max_length=280, null=True, blank=True)

    is_featured = models.SmallIntegerField(default=0)  # 1 = Featured, 0 = Not featured
    status = models.SmallIntegerField(default=1)  # 1 = Active, 0 = Inactive

    remarks = models.TextField(null=True, blank=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'property'


def property_image_path(instance, filename):
    return f"property/{instance.property_id}/images/{filename}"


def property_video_path(instance, filename):
    return f"property/{instance.property_id}/videos/{filename}"


def property_document_path(instance, filename):
    return f"property/{instance.property_id}/documents/{filename}"


class PropertyImage(models.Model):
    property = models.ForeignKey(Property, on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(upload_to=property_image_path)
    caption = models.CharField(max_length=200, null=True, blank=True)
    is_cover = models.SmallIntegerField(default=0)  # 1 = Cover image
    order = models.IntegerField(default=0)
    status = models.SmallIntegerField(default=1)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'property_image'


class PropertyVideo(models.Model):
    property = models.ForeignKey(Property, on_delete=models.CASCADE, related_name='videos')
    video = models.FileField(upload_to=property_video_path, null=True, blank=True)
    video_url = models.CharField(max_length=500, null=True, blank=True)
    title = models.CharField(max_length=200, null=True, blank=True)
    order = models.IntegerField(default=0)
    status = models.SmallIntegerField(default=1)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'property_video'


class PropertyDocument(models.Model):
    property = models.ForeignKey(Property, on_delete=models.CASCADE, related_name='documents')
    document = models.FileField(upload_to=property_document_path)
    title = models.CharField(max_length=200, null=True, blank=True)
    order = models.IntegerField(default=0)
    status = models.SmallIntegerField(default=1)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'property_document'


class BuyerEnquiry(models.Model):
    property = models.ForeignKey(Property, on_delete=models.SET_NULL, null=True, blank=True, related_name='buyer_enquiries')

    full_name = models.CharField(max_length=150, null=True, blank=True)
    mobile_number = models.CharField(max_length=20, null=True, blank=True)
    email = models.EmailField(max_length=255, null=True, blank=True)
    preferred_location = models.CharField(max_length=150, null=True, blank=True)
    property_type = models.CharField(max_length=40, null=True, blank=True)
    budget = models.CharField(max_length=100, null=True, blank=True)
    message = models.TextField(null=True, blank=True)

    admin_notes = models.TextField(null=True, blank=True)
    status = models.SmallIntegerField(default=1)  # 1=New, 2=Contacted, 3=In Progress, 4=Closed

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'buyer_enquiry'


class SellerEnquiry(models.Model):
    seller_name = models.CharField(max_length=150, null=True, blank=True)
    mobile_number = models.CharField(max_length=20, null=True, blank=True)
    email = models.EmailField(max_length=255, null=True, blank=True)

    property_name = models.CharField(max_length=200, null=True, blank=True)
    location = models.CharField(max_length=150, null=True, blank=True)
    property_type = models.CharField(max_length=40, null=True, blank=True)
    land_area = models.CharField(max_length=100, null=True, blank=True)  # e.g. "2400 Sq.Ft" or "1.5 Acres"
    expected_price = models.CharField(max_length=100, null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    additional_info = models.TextField(null=True, blank=True)

    admin_notes = models.TextField(null=True, blank=True)
    status = models.SmallIntegerField(default=1)  # 1=New, 2=Contacted, 3=In Progress, 4=Closed, 5=Approved & Listed

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'seller_enquiry'


def seller_media_path(instance, filename):
    return f"seller_enquiry/{instance.seller_enquiry_id}/{filename}"


class SellerEnquiryPhoto(models.Model):
    seller_enquiry = models.ForeignKey(SellerEnquiry, on_delete=models.CASCADE, related_name='photos')
    image = models.ImageField(upload_to=seller_media_path)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'seller_enquiry_photo'


class SellerEnquiryVideo(models.Model):
    seller_enquiry = models.ForeignKey(SellerEnquiry, on_delete=models.CASCADE, related_name='videos')
    video = models.FileField(upload_to=seller_media_path)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'seller_enquiry_video'


class SellerEnquiryDocument(models.Model):
    seller_enquiry = models.ForeignKey(SellerEnquiry, on_delete=models.CASCADE, related_name='documents')
    document = models.FileField(upload_to=seller_media_path)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'seller_enquiry_document'

