from django.contrib.sitemaps import Sitemap
from django.urls import reverse

from accounts.visibility import visible_companies, visible_seekers

from blog.models import BlogPost
from jobs.models import Job
from podcast.models import PodcastEpisode


class StaticViewSitemap(Sitemap):
    priority = 0.8
    changefreq = 'weekly'

    def items(self):
        return [
            'home:index',
            'home:about',
            'home:services',
            'home:contact',
            'home:partner',
            'home:faq',
            'home:company_faq',
            'jobs:list',
            'companies:list',
            'seekers:list',
            'blog:list',
            'podcast:list',
            'subscriptions:pricing',
            'testimonials:list',
            'accounts:login',
            'accounts:register',
        ]

    def location(self, item):
        return reverse(item)


class JobSitemap(Sitemap):
    changefreq = 'daily'
    priority = 0.9

    def items(self):
        return Job.objects.filter(is_active=True)

    def lastmod(self, obj):
        return obj.updated_at


class CompanySitemap(Sitemap):
    changefreq = 'weekly'
    priority = 0.7

    def items(self):
        return visible_companies()

    def lastmod(self, obj):
        return obj.updated_at


class SeekerSitemap(Sitemap):
    changefreq = 'weekly'
    priority = 0.6

    def items(self):
        return visible_seekers()

    def lastmod(self, obj):
        return obj.updated_at


class BlogPostSitemap(Sitemap):
    changefreq = 'weekly'
    priority = 0.7

    def items(self):
        return BlogPost.objects.filter(is_published=True)

    def lastmod(self, obj):
        return obj.updated_at


class PodcastSitemap(Sitemap):
    changefreq = 'monthly'
    priority = 0.6

    def items(self):
        return PodcastEpisode.objects.filter(is_published=True)

    def lastmod(self, obj):
        return obj.published_at
