from django.shortcuts import redirect
from django.contrib import admin
from django.urls import include, path
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from django.conf import settings
from django.conf.urls.static import static
from apps.candidates.views import CandidateResumeUploadAPIView
from apps.jobs.views import JDApprovalMonitoringView
from apps.users.dashboard_views import (
    DashboardStatsView,
    TotalRecruitersView,
    AssignedRecruitersView,
    RecruiterDetailView,
)


@api_view(["GET"])
@permission_classes([AllowAny])
def health(request):
    return Response({"status": "ok", "service": "backend"})


def home(request):
    return redirect('/api/docs/')


urlpatterns = [
    path("", home),

    path("admin/", admin.site.urls),
    path("health/", health),
    path("api/schema/", SpectacularAPIView.as_view(), name="schema"),
    path("api/docs/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger-ui"),

    path("api/candidate/upload-resume/", CandidateResumeUploadAPIView.as_view(), name="upload-resume-fallback"),

    # Recruiter analytics aliased routes
    path("api/dashboard/stats/", DashboardStatsView.as_view()),
    path("api/dashboard/stats", DashboardStatsView.as_view()),
    path("api/v1/dashboard/stats/", DashboardStatsView.as_view()),
    path("api/v1/dashboard/stats", DashboardStatsView.as_view()),

    path("api/dashboard/total-recruiters/", TotalRecruitersView.as_view()),
    path("api/dashboard/total-recruiters", TotalRecruitersView.as_view()),
    path("api/v1/dashboard/total-recruiters/", TotalRecruitersView.as_view()),
    path("api/v1/dashboard/total-recruiters", TotalRecruitersView.as_view()),

    path("api/dashboard/assigned-recruiters/", AssignedRecruitersView.as_view()),
    path("api/dashboard/assigned-recruiters", AssignedRecruitersView.as_view()),
    path("api/v1/dashboard/assigned-recruiters/", AssignedRecruitersView.as_view()),
    path("api/v1/dashboard/assigned-recruiters", AssignedRecruitersView.as_view()),

    path("api/recruiters/<int:pk>/", RecruiterDetailView.as_view()),
    path("api/recruiters/<int:pk>", RecruiterDetailView.as_view()),
    path("api/v1/recruiters/<int:pk>/", RecruiterDetailView.as_view()),
    path("api/v1/recruiters/<int:pk>", RecruiterDetailView.as_view()),

    # Users list alias
    path("api/users/", include("apps.users.urls")),
    path("api/users", include("apps.users.urls")),

    path("api/v1/public/", include("config.public_urls")),
    path("api/v1/auth/", include("apps.authentication.urls")),
    path("api/v1/users/", include("apps.users.urls")),
    path("api/v1/audit-logs/", include("apps.audit_logs.urls")),
    path("api/v1/dashboard/", include("apps.dashboard.urls")),
    path("api/dashboard/", include("apps.dashboard.urls")),
    path("api/v1/notifications/", include("apps.notifications.urls")),
    path("api/notifications/", include("apps.notifications.urls")),
    path("api/v1/jobs/", include("apps.jobs.urls")),
    path("api/v1/jds/", include("apps.jobs.urls")),
    path("api/jds/", include("apps.jobs.urls")),
    path("api/v1/admin/jd-approval-monitoring", JDApprovalMonitoringView.as_view(), name="admin-monitoring-v1"),
    path("api/v1/admin/jd-approval-monitoring/", JDApprovalMonitoringView.as_view(), name="admin-monitoring-v1-slash"),
    path("api/admin/jd-approval-monitoring", JDApprovalMonitoringView.as_view(), name="admin-monitoring"),
    path("api/admin/jd-approval-monitoring/", JDApprovalMonitoringView.as_view(), name="admin-monitoring-slash"),
    path("api/v1/clients/", include("apps.clients.urls")),
    path("api/v1/candidates/", include("apps.candidates.urls")),
    path("api/v1/menus/", include("apps.menus.urls")),
    path("api/v1/pipeline/", include("apps.pipeline.urls")),
    path("api/v1/reports/", include("apps.reports.urls")),
    path("api/reports/", include("apps.reports.urls")),
    path("api/v1/ai-calls/", include("apps.ai_calls.urls")),
    path("api/v1/", include("apps.master_skills.urls")),
    path("api/v1/master-data/", include("apps.master_data.urls")),
    path("api/master-data/", include("apps.master_data.urls")),
    path("api/v1/llm/", include("apps.llm.urls")),
    path("api/v1/agents/", include("apps.agents.urls")),
    path("api/agents/", include("apps.agents.urls")),
    path("api/v1/master-designation", include("apps.master_designations.urls")),
    path("api/master-designation", include("apps.master_designations.urls")),
    path("api/v1/", include("apps.master_annual_ctc.urls")),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
