# listing/models.py
from django.db import models
from django.utils import timezone
from core.models import BaseTimeStampModel, User
from vendor.models import Vendor, VendorCategory, VendorCategoryServices
from terms.models import Terms


class Listing(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    deadline = models.DateTimeField()
    note = models.CharField(max_length=250, blank=True, null=True)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE, null=True, related_name='listings')

    def __str__(self):
        return self.title
    
    class Meta:
        db_table = 'listing'


class ListingCategory(BaseTimeStampModel):
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE, null=True, related_name='categories')
    vendor_category = models.ForeignKey(VendorCategory, on_delete=models.CASCADE, null=True)
    description = models.CharField(max_length=500, blank=True, null=True)

    def __str__(self):
        return f"Listing: {self.listing.title} - Category ID: {self.vendor_category_id}"
    
    class Meta:
        db_table = 'listing_category'


class ListingCategoryService(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name='category_services')
    vendor_category_services = models.ForeignKey(VendorCategoryServices, on_delete=models.CASCADE)

    def __str__(self):
        return f"Listing ID: {self.listing.id} - Service ID: {self.vendor_category_services_id}"
    
    class Meta:
        db_table = 'listing_category_service'


class ListingTerms(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name='terms')
    term = models.ForeignKey(Terms, on_delete=models.CASCADE)
    note = models.CharField(max_length=250, blank=True, null=True)

    def __str__(self):
        return f"Listing ID: {self.listing.id} - Term ID: {self.term_id}"
    
    class Meta:
        db_table = 'listing_terms'
