"""API URL routing — maps every Flutter endpoint to a view."""
from django.urls import path

from .auth_views import (
    ForgotPasswordView, LoginView, LogoutView,
    RefreshTokenView, SignupView, VerifyResetCodeView,
)
from .user_views import OnboardingView, UserProfileView
from .period_views import (
    PeriodAddView, PeriodDeleteView, PeriodHistoryView, PeriodPredictionView,
)
from .pregnancy_views import PregnancyDataView, PregnancyStartView
from .consultation_views import (
    BookConsultationView, ConsultationListView, ConsultationMessagesView,
    DoctorInboxView, DoctorsListView, SendMessageView, VideoCallView,
)
from .feed_views import (
    FeedCommentsView, FeedLikeView, FeedMediaUploadView, FeedPostsView,
)
from .notification_views import (
    MarkAllReadView, MarkNotificationReadView,
    NotificationListView, RegisterTokenView,
)
from .settings_views import UserSettingsView
from .know_views import KnowContentView
from .admin_views import (
    AdminApproveDoctorView, AdminBanUserView, AdminDoctorsView,
    AdminKnowContentDetailView, AdminKnowContentsView,
    AdminKnowTopicDetailView, AdminKnowTopicsView,
    AdminRejectDoctorView, AdminReportsView, AdminUsersView,
)

urlpatterns = [
    # ── Auth ──────────────────────────────────────────────────────────────────
    path('auth/signup', SignupView.as_view()),
    path('auth/login', LoginView.as_view()),
    path('auth/logout', LogoutView.as_view()),
    path('auth/refresh-token', RefreshTokenView.as_view()),
    path('auth/forgot-password', ForgotPasswordView.as_view()),
    path('auth/verify-reset-code', VerifyResetCodeView.as_view()),

    # ── User ──────────────────────────────────────────────────────────────────
    path('user/profile', UserProfileView.as_view()),
    path('user/onboarding', OnboardingView.as_view()),

    # ── Period ────────────────────────────────────────────────────────────────
    path('period/add', PeriodAddView.as_view()),
    path('period/history', PeriodHistoryView.as_view()),
    path('period/prediction', PeriodPredictionView.as_view()),
    path('period/<int:pk>', PeriodDeleteView.as_view()),

    # ── Pregnancy ─────────────────────────────────────────────────────────────
    path('pregnancy/start', PregnancyStartView.as_view()),
    path('pregnancy/data', PregnancyDataView.as_view()),

    # ── Consultation ──────────────────────────────────────────────────────────
    path('consultation/doctors', DoctorsListView.as_view()),
    path('consultation/book', BookConsultationView.as_view()),
    path('consultation/list', ConsultationListView.as_view()),
    path('consultation/message', SendMessageView.as_view()),
    path('consultation/doctor-inbox', DoctorInboxView.as_view()),
    path('consultation/<int:consultation_id>/video-call', VideoCallView.as_view()),
    path('consultation/<int:consultation_id>/messages', ConsultationMessagesView.as_view()),

    # ── Feed ──────────────────────────────────────────────────────────────────
    path('feed/posts', FeedPostsView.as_view()),
    path('feed/posts/<int:post_id>/like', FeedLikeView.as_view()),
    path('feed/posts/<int:post_id>/comments', FeedCommentsView.as_view()),
    path('feed/upload', FeedMediaUploadView.as_view()),

    # ── Notifications ─────────────────────────────────────────────────────────
    path('notifications', NotificationListView.as_view()),
    path('notifications/register-token', RegisterTokenView.as_view()),
    path('notifications/read-all', MarkAllReadView.as_view()),
    path('notifications/<int:pk>/read', MarkNotificationReadView.as_view()),

    # ── Settings ──────────────────────────────────────────────────────────────
    path('settings', UserSettingsView.as_view()),

    # ── Knowledge ─────────────────────────────────────────────────────────────
    path('know/content', KnowContentView.as_view()),

    # ── Admin ─────────────────────────────────────────────────────────────────
    path('admin/users', AdminUsersView.as_view()),
    path('admin/users/ban', AdminBanUserView.as_view()),
    path('admin/doctors', AdminDoctorsView.as_view()),
    path('admin/doctors/<int:doctor_id>/approve', AdminApproveDoctorView.as_view()),
    path('admin/doctors/<int:doctor_id>/reject', AdminRejectDoctorView.as_view()),
    path('admin/reports', AdminReportsView.as_view()),
    path('admin/know/topics', AdminKnowTopicsView.as_view()),
    path('admin/know/topics/<int:topic_id>', AdminKnowTopicDetailView.as_view()),
    path('admin/know/contents', AdminKnowContentsView.as_view()),
    path('admin/know/contents/<int:content_id>', AdminKnowContentDetailView.as_view()),
]
