from django.conf.urls import include, patterns, url
from django.contrib import admin
from django.contrib.sitemaps import views as sitemap_views

from django.views.decorators.cache import cache_page
from django.views.generic import TemplateView, RedirectView

from feeds import PackageFeed, NewsFeed, ReleaseFeed
import sitemaps

our_sitemaps = {
    'base':           sitemaps.BaseSitemap,
    'news':           sitemaps.NewsSitemap,
    'packages':       sitemaps.PackagesSitemap,
    'package-files':  sitemaps.PackageFilesSitemap,
    'package-groups': sitemaps.PackageGroupsSitemap,
    'split-packages': sitemaps.SplitPackagesSitemap,
    'releases':       sitemaps.ReleasesSitemap,
    'todolists':      sitemaps.TodolistSitemap,
}

news_sitemaps = { 'news': sitemaps.RecentNewsSitemap }

urlpatterns = []

# Public pages
urlpatterns += patterns('public.views',
    (r'^$', 'index', {}, 'index'),
    (r'^about/$', TemplateView.as_view(template_name='public/about.html'),
        {}, 'page-about'),
    (r'^art/$', RedirectView.as_view(url='https://projects.parabola.nu/artwork.git/'),
        {}, 'page-art'),
    (r'^donate/$', RedirectView.as_view(url='https://wiki.parabola.nu/Donations'),
        {}, 'page-donate'),
    (r'^download/$', RedirectView.as_view(url='https://wiki.parabola.nu/Get_Parabola'),
        {}, 'page-download'),
    (r'^master-keys/$',  'keys',     {}, 'page-keys'),
    (r'^master-keys/json/$', 'keys_json', {}, 'pgp-keys-json'),
    (r'^people/(?P<slug>[-\w]+)/$', 'people', {}, 'people'),
)

# Feeds patterns, used below
feeds_patterns = patterns('',
    (r'^$',          'public.views.feeds', {}, 'feeds-list'),
    (r'^news/$',     cache_page(311)(NewsFeed())),
    (r'^packages/$', cache_page(313)(PackageFeed())),
    (r'^packages/(?P<arch>[A-z0-9]+)/$',
        cache_page(313)(PackageFeed())),
    (r'^packages/all/(?P<repo>[A-z0-9\-]+)/$',
        cache_page(313)(PackageFeed())),
    (r'^packages/(?P<arch>[A-z0-9]+)/(?P<repo>[A-z0-9\-]+)/$',
        cache_page(313)(PackageFeed())),
    (r'^releases/$', cache_page(317)(ReleaseFeed())),
)

# Includes and other remaining stuff
urlpatterns += patterns('',
    (r'^admin/',     include(admin.site.urls)),
    (r'^devel/',     include('devel.urls')),
    (r'^feeds/',     include(feeds_patterns)),
    (r'^groups/',    include('packages.urls_groups')),
    (r'^mirrorlist/',include('mirrors.urls_mirrorlist')),
    (r'^mirrors/',   include('mirrors.urls')),
    (r'^news/',      include('news.urls')),
    (r'^packages/',  include('packages.urls')),
    (r'^releng/',    include('releng.urls')),
    (r'^todo/',      include('todolists.urls')),
    (r'^visualize/', include('visualize.urls')),
    (r'^opensearch/packages/$', 'packages.views.opensearch',
        {}, 'opensearch-packages'),
    (r'^opensearch/packages/suggest$', 'packages.views.opensearch_suggest',
        {}, 'opensearch-packages-suggest'),
)

# Sitemaps
urlpatterns += patterns('',
    (r'^sitemap.xml$',
        cache_page(1831)(sitemap_views.index),
        {'sitemaps': our_sitemaps, 'sitemap_url_name': 'sitemaps'}),
    (r'^sitemap-(?P<section>.+)\.xml$',
        cache_page(1831)(sitemap_views.sitemap),
        {'sitemaps': our_sitemaps, 'template_name': 'sitemaps/sitemap.xml'},
        'sitemaps'),
    (r'^news-sitemap\.xml$',
        cache_page(1831)(sitemap_views.sitemap),
        {'sitemaps': news_sitemaps, 'template_name': 'sitemaps/news_sitemap.xml'},
        'news-sitemap'),
)

# Authentication
urlpatterns += patterns('django.contrib.auth.views',
    (r'^login/$', 'login', {'template_name': 'registration/login.html'}, 'login'),
    (r'^logout/$', 'logout', {'template_name': 'registration/logout.html'}, 'logout'),
)

# Redirects for older known pages we see in the logs
legacy_urls = (
    ('^about.php',     '/about/'),
    ('^changelog.php', '/packages/?sort=-last_update'),
    ('^devs.php',      '/people/hackers/'),
    ('^donations.php', '/donate/'),
    ('^download.php',  '/download/'),
    ('^index.php',     '/'),
    ('^logos.php',     '/art/'),
    ('^news.php',      '/news/'),
    ('^packages.php',  '/packages/'),
    ('^people.php',    '/people/hackers/'),
    ('^todolists/$',   '/todo/'),
    ('^hackers/$',     '/people/hackers/'),
    ('^developers/$',  '/people/hackers/'),
    ('^artists/$',     '/people/artists/'),
    ('^fellows/$',     '/people/hacker-fellows/'),
    ('^trustedusers/$', '/people/hackers/'),

    ('^docs/en/guide/install/arch-install-guide.html',
        'https://wiki.parabola.nu/Installation_Guide'),
    ('^docs/en/', 'https://wiki.parabola.nu/'),
    ('^docs/', 'https://wiki.parabola.nu/'),
)

urlpatterns += [url(old_url, RedirectView.as_view(url=new_url))
        for old_url, new_url in legacy_urls]


def show_urls(urllist=urlpatterns, depth=0):
    for entry in urllist:
        print "  " * depth, entry.regex.pattern
        if hasattr(entry, 'url_patterns'):
            show_urls(entry.url_patterns, depth + 1)

# vim: set ts=4 sw=4 et:
