from django.db import models
from django.utils import timezone
import uuid
from apps.apps_.models import App


class Tour(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)  # internal PK
    app = models.ForeignKey(App, on_delete=models.CASCADE, related_name="tours")
    external_id = models.CharField(max_length=100)  
    name = models.CharField(max_length=255)
    date = models.DateField()

    class Meta:
        unique_together = ("app", "external_id")  

    def __str__(self):
        return f"{self.name} ({self.date})"


class ReviewLink(models.Model):
    """
    Stores review links per customer.
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    tour = models.ForeignKey(Tour, on_delete=models.CASCADE, related_name="review_links")
    customer_email = models.EmailField()
    token_uuid = models.UUIDField(default=uuid.uuid4, unique=True)   # internal DB token
    token_str = models.CharField(max_length=64, unique=True)         # public secure link
    created_at = models.DateTimeField(auto_now_add=True)
    expires_at = models.DateTimeField(null=True, blank=True)

    # New field – attaches a review once created
    review = models.OneToOneField(
        "Review",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="link"
    )

    def __str__(self):
        return f"Link for {self.customer_email} on {self.tour.id}"

class Review(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    tour = models.ForeignKey(Tour, on_delete=models.CASCADE, related_name="reviews")
    customer_email = models.EmailField()  
    rating = models.PositiveSmallIntegerField()
    comment = models.TextField()
    photos = models.JSONField(default=list, blank=True)
    submitted_at = models.DateTimeField(auto_now_add=True)

    SOURCE_CHOICES = (
        ("internal", "Internal"),
        ("google", "Google"),
        ("tripadvisor", "TripAdvisor"),
    )
    source = models.CharField(max_length=20, choices=SOURCE_CHOICES, default="internal")

    class Meta:
        unique_together = ("tour", "customer_email")

    def __str__(self):
        return f"Review {self.rating}★ by {self.customer_email} for {self.tour.name}"


class BusinessPlatformLinks(models.Model):
    """Store direct review URLs for businesses"""
    
    app = models.OneToOneField(App, on_delete=models.CASCADE, related_name="platform_links")
    
    # Direct review URLs - much simpler!
    google_review_url = models.URLField(blank=True, help_text="Direct Google review URL for this business")
    tripadvisor_review_url = models.URLField(blank=True, help_text="Direct TripAdvisor review URL for this business")
    booking_review_url = models.URLField(blank=True, help_text="Direct Booking.com review URL for this business")
    facebook_review_url = models.URLField(blank=True, help_text="Direct Facebook review URL for this business")
    
    # Business details for context
    business_name = models.CharField(max_length=255, blank=True)
    business_address = models.TextField(blank=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def get_configured_platforms(self):
        """Return list of configured platform data"""
        platforms = []
        
        if self.google_review_url:
            platforms.append({
                "name": "Google Reviews",
                "icon": "🟢", 
                "url": self.google_review_url,
                "color": "bg-green-600 hover:bg-green-700",
                "description": "Help others find this business on Google"
            })
            
        if self.tripadvisor_review_url:
            platforms.append({
                "name": "TripAdvisor",
                "icon": "🟤",
                "url": self.tripadvisor_review_url, 
                "color": "bg-green-700 hover:bg-green-800",
                "description": "Share your experience with travelers"
            })
            
        if self.facebook_review_url:
            platforms.append({
                "name": "Facebook",
                "icon": "🔵",
                "url": self.facebook_review_url,
                "color": "bg-blue-600 hover:bg-blue-700", 
                "description": "Leave a review on Facebook"
            })
            
        if self.booking_review_url:
            platforms.append({
                "name": "Booking.com", 
                "icon": "🟦",
                "url": self.booking_review_url,
                "color": "bg-blue-700 hover:bg-blue-800",
                "description": "Help future guests on Booking.com"
            })
            
        return platforms
    
    def __str__(self):
        return f"Platform links for {self.app.name}"