from django.contrib.sitemaps import Sitemap
from products.models import Product
from accounts.models import VendorProfile
from blog.models import BlogPost
from events.models import Event
from services.models import Service
from groups.models import Group
from markets.models import Market
from menus.models import Menu
from videos.models import VideoListing

FRONTEND_URL = "https://wananchimart.com"


class StaticSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.8

    def items(self):
        return [
            ("/", 1.0, "daily"),
            ("/explore", 0.9, "daily"),
            ("/categories", 0.9, "weekly"),
            ("/vendors", 0.9, "daily"),
            ("/top-shops", 0.8, "daily"),
            ("/near-you", 0.8, "daily"),
            ("/under-price", 0.8, "daily"),
            ("/counties", 0.8, "weekly"),
            ("/services", 0.8, "daily"),
            ("/service-providers", 0.7, "daily"),
            ("/events", 0.8, "daily"),
            ("/malls", 0.8, "daily"),
            ("/malls/leaderboard", 0.6, "weekly"),
            ("/markets", 0.8, "weekly"),
            ("/menus", 0.7, "daily"),
            ("/feeds", 0.7, "daily"),
            ("/stories", 0.6, "daily"),
            ("/blog", 0.7, "weekly"),
            ("/about", 0.5, "monthly"),
            ("/help", 0.5, "monthly"),
            ("/terms", 0.3, "monthly"),
            ("/privacy", 0.3, "monthly"),
            ("/cookies", 0.3, "monthly"),
        ]

    def location(self, item):
        return item[0]

    def priority(self, item):
        return item[1]

    def changefreq(self, item):
        return item[2]


class VendorSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.8

    def items(self):
        return VendorProfile.objects.filter(
            shop_name__isnull=False,
        ).exclude(shop_name="").values_list("slug", flat=True)

    def location(self, slug):
        return f"/shop/{slug}"


class ProductSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.7

    def items(self):
        return Product.objects.filter(
            status="active",
        ).values_list("category", "slug")

    def location(self, item):
        category, slug = item
        return f"/{category}/product/{slug}"


class BlogSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.6

    def items(self):
        return BlogPost.objects.filter(
            status="published",
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/blog/{slug}"


class EventSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.7

    def items(self):
        return Event.objects.filter(
            status="active",
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/events/{slug}"


class ServiceSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.7

    def items(self):
        return Service.objects.filter(
            status="active",
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/services/{slug}"


class MallSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.6

    def items(self):
        return Group.objects.filter(
            is_active=True,
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/malls/{slug}"


class MarketSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.6

    def items(self):
        return Market.objects.filter(
            status="active",
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/markets/{slug}"


class MenuSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.5

    def items(self):
        return Menu.objects.filter(
            status="active",
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/menu/{slug}"


class VideoSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.5

    def items(self):
        return VideoListing.objects.filter(
            is_active=True,
        ).values_list("slug", flat=True)

    def location(self, slug):
        return f"/videos/{slug}"


sitemaps = {
    "static": StaticSitemap,
    "vendors": VendorSitemap,
    "products": ProductSitemap,
    "blog": BlogSitemap,
    "events": EventSitemap,
    "services": ServiceSitemap,
    "malls": MallSitemap,
    "markets": MarketSitemap,
    "menus": MenuSitemap,
    "videos": VideoSitemap,
}
