from django.contrib.sitemaps import Sitemap
from django.urls import reverse

from .models import CabService, CustomerReview, Destination, HolidayPackage


class StaticPageSitemap(Sitemap):
    priority = 0.8
    changefreq = "weekly"

    def items(self):
        return [
            "travel:home",
            "travel:about",
            "travel:packages",
            "travel:cab_services",
            "travel:destinations",
            "travel:gallery",
            "travel:contact",
            "travel:reviews",
        ]

    def location(self, item):
        return reverse(item)


class PackageSitemap(Sitemap):
    priority = 0.7
    changefreq = "weekly"

    def items(self):
        return HolidayPackage.objects.filter(is_active=True)

    def location(self, obj):
        return reverse("travel:package_detail", kwargs={"package_slug": obj.slug})

    def lastmod(self, obj):
        return obj.updated_at


class DestinationSitemap(Sitemap):
    priority = 0.6
    changefreq = "weekly"

    def items(self):
        return Destination.objects.filter(is_active=True)

    def location(self, obj):
        return f"{reverse('travel:destinations')}#{obj.slug}"

    def lastmod(self, obj):
        return obj.updated_at


class CabServiceSitemap(Sitemap):
    priority = 0.6
    changefreq = "weekly"

    def items(self):
        return CabService.objects.filter(is_active=True)

    def location(self, obj):
        return f"{reverse('travel:cab_services')}#{obj.slug}"

    def lastmod(self, obj):
        return obj.updated_at


class ReviewsSitemap(Sitemap):
    priority = 0.7
    changefreq = "daily"

    def items(self):
        return ["travel:reviews"] if CustomerReview.objects.filter(status=CustomerReview.Status.APPROVED).exists() else []

    def location(self, item):
        return reverse(item)
