# from django.contrib.sitemaps import Sitemap
# from django.urls import reverse, get_resolver, URLPattern, URLResolver


# class AutoStaticSitemap(Sitemap):
#     changefreq = "daily"
#     priority = 0.9

#     def items(self):
#         url_names = []
#         resolver = get_resolver()

#         skip_names = [
#             "sitemap",
#             "admin:index",
#         ]

#         def collect_urls(patterns):
#             for pattern in patterns:
#                 if isinstance(pattern, URLPattern):
#                     if pattern.name:
#                         route = str(pattern.pattern)

#                         # Skip dynamic urls like <slug:slug>, <int:id>
#                         if "<" not in route and ">" not in route:
#                             if pattern.name not in skip_names:
#                                 url_names.append(pattern.name)

#                 elif isinstance(pattern, URLResolver):
#                     collect_urls(pattern.url_patterns)

#         collect_urls(resolver.url_patterns)

#         return list(set(url_names))

#     def location(self, item):
#         return reverse(item)





from django.contrib.sitemaps import Sitemap
from django.urls import reverse, get_resolver, URLPattern, URLResolver


class AutoStaticSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.9

    def items(self):
        url_names = []
        resolver = get_resolver()

        skip_names = [
            "sitemap",
            "admin:index",
            "login",
            "logout",
        ]

        def collect_urls(patterns):
            for pattern in patterns:
                if isinstance(pattern, URLPattern):
                    if pattern.name:
                        route = str(pattern.pattern)

                        # Skip dynamic URLs like <slug:slug>, <int:id>, <pk>
                        if "<" in route or ">" in route:
                            continue

                        # Skip admin and unwanted names
                        if pattern.name in skip_names:
                            continue

                        # Check if this URL can actually reverse
                        try:
                            reverse(pattern.name)
                            url_names.append(pattern.name)
                        except Exception:
                            pass

                elif isinstance(pattern, URLResolver):
                    collect_urls(pattern.url_patterns)

        collect_urls(resolver.url_patterns)

        return list(set(url_names))

    def location(self, item):
        return reverse(item)












