from django.db import models
from helpers import SoftDeleteModel

class City(SoftDeleteModel):
    name = models.CharField(max_length=100)
    image = models.ImageField(null=True, blank=True,upload_to="city/gallery/")
    created_at = models.DateTimeField(auto_now_add=True)  # optional for tracking
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f" {self.name}"
    

class Holiday(SoftDeleteModel):
    name = models.CharField(max_length=100)
    image = models.ImageField(null=True, blank=True,upload_to="holiday/gallery/")
    created_at = models.DateTimeField(auto_now_add=True)  # optional for tracking
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f" {self.name}"
    
class Packagetype(SoftDeleteModel):
    name = models.CharField(max_length=100)
    image = models.ImageField(null=True, blank=True,upload_to="media/continent/")
    created_at = models.DateTimeField(auto_now_add=True)  # optional for tracking
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f" {self.name}"
    
from django.db import models
from django.utils.text import slugify


# ===============================
# Main Package Model
# ===============================
class Package(SoftDeleteModel):

    title = models.CharField(max_length=255)
    subtitle = models.CharField(max_length=255, blank=True, null=True)
    holiday = models.ForeignKey(
        Holiday,
        on_delete=models.CASCADE,
        related_name="holidays"
    )
    location = models.ForeignKey(
        City,
        on_delete=models.CASCADE,
        related_name="locations", blank=True, null=True
    )
    package_type = models.ForeignKey(
        Packagetype,
        on_delete=models.CASCADE,
        related_name="package_type", blank=True, null=True
    )
    duration = models.CharField(max_length=50)           # 7D & 6N
    places_covered = models.CharField(max_length=50)     # 6 Places
    activities_count = models.CharField(max_length=50)   # 12 Activities

    description = models.TextField()

    # Pricing
    original_price = models.DecimalField(max_digits=10, decimal_places=2)
    discounted_price = models.DecimalField(max_digits=10, decimal_places=2)
    discount_percent = models.PositiveIntegerField(default=0)

    taxes_included = models.BooleanField(default=False)

    # Policies
    confirmation_policy = models.TextField()
    refund_policy = models.TextField()

    # Inclusions / Exclusions
    inclusions = models.TextField(help_text="One per line")
    exclusions = models.TextField(help_text="One per line")

    # Highlights
    highlights = models.TextField(help_text="One per line")

    slug = models.SlugField(max_length=255,unique=True, blank=True)

    is_active = models.BooleanField(default=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)


    def __str__(self):
        return self.title


# ===============================
# Package Gallery Images
# ===============================
class PackageImage(SoftDeleteModel):

    package = models.ForeignKey(
        Package,
        on_delete=models.CASCADE,
        related_name="images"
    )
   
    image = models.ImageField(upload_to="packages/gallery/")

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.package.title} Image"


# ===============================
# Day Wise Itinerary
# ===============================
class PackageItinerary(SoftDeleteModel):

    package = models.ForeignKey(
        Package,
        on_delete=models.CASCADE,
        related_name="itineraries"
    )

    day = models.PositiveIntegerField()
   
    title = models.CharField(max_length=255)

    hotel = models.CharField(max_length=255,null=True,blank=True)

    check_in = models.CharField(max_length=255,null=True,blank=True)

    check_out = models.CharField(max_length=255,null=True,blank=True)

    ship_from = models.CharField(max_length=255,null=True,blank=True)

    to = models.CharField(max_length=255,null=True,blank=True)

    description = models.TextField()

    transfer_type = models.CharField(
        max_length=100,
        blank=True,
        null=True
    )

    flight_details = models.CharField(
        max_length=255,
        blank=True,
        null=True
    )

    is_private_transfer = models.BooleanField(default=False)

    class Meta:
        ordering = ["day"]

    def __str__(self):
        return f"{self.package.title} - Day {self.day}"



class PackageItineraryImage(models.Model):

    itinerary = models.ForeignKey(
        PackageItinerary,
        on_delete=models.CASCADE,
        related_name="images"
    )

    image = models.ImageField(upload_to="itinerary/gallery/")

    activity = models.CharField(max_length=255,null=True,blank=True)

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.itinerary} Image"
    
    
# ===============================
# Package Inquiry
# ===============================
class PackageInquiry(SoftDeleteModel):

   
    full_name = models.CharField(max_length=200)

    email = models.EmailField()

    phone = models.CharField(max_length=20)

    destination = models.CharField(max_length=200)

    travel_date = models.DateField()

    no_of_traveller = models.IntegerField(blank=True, null=True)

    message = models.TextField(blank=True, null=True)

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.full_name
    
class ContactUs(SoftDeleteModel):

   
    full_name = models.CharField(max_length=200)

    email = models.EmailField()

    phone = models.CharField(max_length=20)

    message = models.TextField(blank=True, null=True)

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.full_name
    
class SocialMedia(SoftDeleteModel):
    name = models.CharField(max_length=100)
    website = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)  # optional for tracking
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f" {self.name}"
    
class HomeBanner(SoftDeleteModel):
    
    name = models.ForeignKey(
        City,
        on_delete=models.CASCADE,
        related_name="locatisons", blank=True, null=True
    )
    tagline = models.CharField(max_length=100,null=True, blank=True)
    image = models.ImageField(null=True, blank=True,upload_to="media/homebanner/banner/")
    created_at = models.DateTimeField(auto_now_add=True)  # optional for tracking
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f" {self.name}"


class CruisePackage(SoftDeleteModel):

    title = models.CharField(max_length=255)
    subtitle = models.CharField(max_length=255, blank=True, null=True)
    package_type = models.ForeignKey(
        Packagetype,
        on_delete=models.CASCADE,
        related_name="package_types", blank=True, null=True
    )
    duration = models.CharField(max_length=200, blank=True, null=True)           # 7D & 6N
    departed = models.CharField(max_length=200, blank=True, null=True)     # 6 Places
    visiting = models.CharField(max_length=200, blank=True, null=True)   # 12 Activities

    description = models.TextField()

    # Pricing
    original_price = models.DecimalField(max_digits=10, decimal_places=2)
    discounted_price = models.DecimalField(max_digits=10, decimal_places=2)
    discount_percent = models.PositiveIntegerField(default=0)

    taxes_included = models.BooleanField(default=False)

    # Policies
    confirmation_policy = models.TextField()
    refund_policy = models.TextField()

    # Inclusions / Exclusions
    inclusions = models.TextField(help_text="One per line")
    exclusions = models.TextField(help_text="One per line")

    # Highlights
    highlights = models.TextField(help_text="One per line")

    slug = models.SlugField(max_length=255,unique=True, blank=True)

    is_active = models.BooleanField(default=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)


    def __str__(self):
        return self.title
    

class CruisePackageImage(SoftDeleteModel):

    cruise_package = models.ForeignKey(
        CruisePackage,
        on_delete=models.CASCADE,
        related_name="images"
    )

    image = models.ImageField(upload_to="cruise_packages/gallery/")

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.cruise_package.title} Image"
    
# ===============================
# Cruise Day Wise Itinerary
# ===============================
class CruiseItinerary(SoftDeleteModel):

    cruise_package = models.ForeignKey(
        CruisePackage,
        on_delete=models.CASCADE,
        related_name="itineraries"
    )
    
    title = models.CharField(max_length=255, null=True, blank=True)

    day = models.PositiveIntegerField()

    place = models.CharField(max_length=255)

    time_from = models.CharField(max_length=255, null=True, blank=True)

    time_to = models.CharField(max_length=255, null=True, blank=True)

    ship_from = models.CharField(max_length=255, null=True, blank=True)

    to = models.CharField(max_length=255, null=True, blank=True)

    description = models.TextField()

    transfer_type = models.CharField(
        max_length=100,
        blank=True,
        null=True
    )

    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["day"]

    def __str__(self):
        return f"{self.cruise_package.title} - Day {self.day}"
    

class CruisePackageInquiry(SoftDeleteModel):

   
    departure = models.CharField(max_length=200)

    sail_month = models.CharField(max_length=200)

    duration = models.CharField(max_length=200)

    email = models.EmailField()

    full_name = models.CharField(max_length=200)

    phone = models.CharField(max_length=20)

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.full_name
    
class Gallery(SoftDeleteModel):
    
    image = models.ImageField(upload_to="media/gallery/")

    created_at = models.DateTimeField(auto_now_add=True)

    
class Review(SoftDeleteModel):
    
    name = models.CharField(max_length=200)

    city = models.CharField(max_length=200)

    review = models.CharField(max_length=200)

    image = models.ImageField(upload_to="media/review/")

    created_at = models.DateTimeField(auto_now_add=True)

    