
from django.contrib import admin
from django.urls import path,include,re_path
from django.views.static import serve
from tupy.media_views import media_serve
from django.views.generic import RedirectView 
from django.conf import settings
from handlers.views import NotFoundView
from products.sitemaps import StaticViewSitemap, BlogSitemap, FittingSitemap, CatalogSitemap, VideoSitemap
from django.contrib.sitemaps.views import sitemap
from django.conf.urls.static import static

# Site Map Urs

sitemaps = {
    "static": StaticViewSitemap,
    "blog": BlogSitemap,
    "fittings": FittingSitemap,
    "catalogs": CatalogSitemap,
"videos": VideoSitemap,
}

# Url Patterns


from django.http import HttpResponse

def robots_txt(request):
    lines = [
        "User-agent: *",
        "Allow: /",
        "Disallow: /admin/",
        "Disallow: /ckeditor/",
        "",
        "Sitemap: https://tupybrazil.ir/sitemap.xml",
        "Sitemap: https://tupybrazil.ir/image-sitemap.xml",
"Sitemap: https://tupybrazil.ir/video-sitemap.xml",
    ]
    return HttpResponse("\n".join(lines), content_type="text/plain")





















def video_sitemap(request):
    """Google video sitemap for the video pages."""
    from home.models import Videos
    from home.views import video_info
    from django.utils.html import escape
    base = "%s://%s" % (request.scheme, request.get_host())
    rows = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
        "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:video=\"http://www.google.com/schemas/sitemap-video/1.1\">"]
    for v in Videos.objects.all():
        info = video_info(v)
        try:
            thumb = base + v.image.url
            content = base + v.video.url
        except Exception:
            continue
        rows.append("<url>")
        rows.append("<loc>%s%s</loc>" % (base, escape(info["url"])))
        rows.append("<video:video>")
        rows.append("<video:thumbnail_loc>%s</video:thumbnail_loc>" % escape(thumb))
        rows.append("<video:title>%s</video:title>" % escape(v.title or ""))
        rows.append("<video:description>%s</video:description>" % escape((v.description or v.title or "")[:2000]))
        rows.append("<video:content_loc>%s</video:content_loc>" % escape(content))
        if info["seconds"]:
            rows.append("<video:duration>%d</video:duration>" % info["seconds"])
        if info["upload_date"]:
            rows.append("<video:publication_date>%s</video:publication_date>" % info["upload_date"])
        rows.append("<video:family_friendly>yes</video:family_friendly>")
        rows.append("<video:live>no</video:live>")
        rows.append("</video:video>")
        rows.append("</url>")
    rows.append("</urlset>")
    return HttpResponse("".join(rows), content_type="application/xml")


def image_sitemap(request):
    """Image sitemap so product photos are eligible for Google Images."""
    from products.models import Fitting
    from django.utils.html import escape
    base = "%s://%s" % (request.scheme, request.get_host())
    rows = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
        "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:image=\"http://www.google.com/schemas/sitemap-image/1.1\">"]
    for f in Fitting.objects.filter(is_active=True):
        if not f.image:
            continue
        rows.append("  <url>")
        rows.append("    <loc>%s%s</loc>" % (base, f.get_absolute_url()))
        rows.append("    <image:image>")
        rows.append("      <image:loc>%s%s</image:loc>" % (base, f.image.url))
        rows.append("      <image:title>%s</image:title>" % escape(f.name + " توپی برزیل"))
        rows.append("      <image:caption>%s</image:caption>" % escape("%s توپی برزیل، فیگور %s" % (f.name, f.figure)))
        rows.append("    </image:image>")
        rows.append("  </url>")
    rows.append("</urlset>")
    return HttpResponse("\n".join(rows), content_type="application/xml")






urlpatterns = [
    path('image-sitemap.xml', image_sitemap, name='image-sitemap'),
path('video-sitemap.xml', video_sitemap, name='video-sitemap'),
    path('robots.txt', robots_txt, name='robots-txt'),

    # legacy-wp: old WordPress date URLs -> product catalogue
    re_path(r'^\d{4}/\d{2}/\d{2}/.*$', RedirectView.as_view(url='/products', permanent=True)),




    path('admin/', admin.site.urls),

    # ! SITE MAP URL

    path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),


    #! APP URLS

    path('',include('home.urls')),
    path('',include('about.urls')),
    path('',include('representatives.urls')),
    path('',include('standards.urls')),
    path('',include('products.urls')),
    path('',include('blog.urls')),
    path("ckeditor/", include("ckeditor_uploader.urls")),

   
    re_path(r'^media/(?P<path>.*)$', media_serve),
    re_path(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
]


handler404 = NotFoundView()

# root favicon so Google's favicon crawler can find it
urlpatterns += [
    path('favicon.ico', RedirectView.as_view(url='/static/img/favicon.png', permanent=True)),
]