from rest_framework.response import Response
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from django.conf import settings
from job.models import Job
from blogs.models import Blog


@api_view(['GET'])
@permission_classes([AllowAny])
def sitemap_api(request):
    """
    API endpoint to get sitemap data in JSON format.
    Frontend can consume this to generate sitemap.xml and robots.txt files.
    
    All URL paths are configured in settings.SITEMAP_URLS.
    If you change frontend URLs, update settings.SITEMAP_URLS to reflect changes.
    
    Returns:
        {
            "frontend_base_url": "https://stafflyn.com",
            "urls": [
                {
                    "loc": "https://stafflyn.com/",
                    "priority": 1.0,
                    "changefreq": "daily",
                    "lastmod": "2024-05-03T12:00:00"
                },
                ...
            ]
        }
    """
    
    frontend_base_url = settings.FRONTEND_BASE_URL
    sitemap_config = settings.SITEMAP_URLS
    urls = []
    
    # Add homepage
    homepage_config = sitemap_config.get('homepage', {})
    urls.append({
        "loc": f"{frontend_base_url}{homepage_config.get('path', '/')}",
        "priority": homepage_config.get('priority', 1.0),
        "changefreq": homepage_config.get('changefreq', 'daily'),
        "lastmod": None
    })
    
    # Add jobs list page
    jobs_list_config = sitemap_config.get('jobs_list', {})
    urls.append({
        "loc": f"{frontend_base_url}{jobs_list_config.get('path', '/jobs/')}",
        "priority": jobs_list_config.get('priority', 0.9),
        "changefreq": jobs_list_config.get('changefreq', 'daily'),
        "lastmod": None
    })
    
    # Add individual job pages (only published jobs)
    job_detail_config = sitemap_config.get('job_detail', {})
    job_path_template = job_detail_config.get('path', '/jobs/{slug}/')
    
    jobs = Job.objects.filter(status=True).order_by('-updated_at')
    for job in jobs:
        job_path = job_path_template.replace('{slug}', str(job.slug))
        urls.append({
            "loc": f"{frontend_base_url}{job_path}",
            "priority": job_detail_config.get('priority', 0.8),
            "changefreq": job_detail_config.get('changefreq', 'weekly'),
            "lastmod": job.updated_at.isoformat() if job.updated_at else None
        })
    
    # Add blogs list page
    blogs_list_config = sitemap_config.get('blogs_list', {})
    urls.append({
        "loc": f"{frontend_base_url}{blogs_list_config.get('path', '/blogs/')}",
        "priority": blogs_list_config.get('priority', 0.9),
        "changefreq": blogs_list_config.get('changefreq', 'daily'),
        "lastmod": None
    })
    
    # Add individual blog pages (only published blogs)
    # Auto-updates when slug changes and removes unpublished blogs
    blog_detail_config = sitemap_config.get('blog_detail', {})
    blog_path_template = blog_detail_config.get('path', '/blogs/{slug}/')
    
    blogs = Blog.objects.filter(is_published=True).order_by('-updated_at')
    for blog in blogs:
        blog_path = blog_path_template.replace('{slug}', str(blog.slug))
        urls.append({
            "loc": f"{frontend_base_url}{blog_path}",
            "priority": blog_detail_config.get('priority', 0.7),
            "changefreq": blog_detail_config.get('changefreq', 'weekly'),
            "lastmod": blog.updated_at.isoformat() if blog.updated_at else None
        })
    
    return Response({
        "frontend_base_url": frontend_base_url,
        "total_urls": len(urls),
        "urls": urls
    })
