from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import (
    RegisterView,
    LoginView,
    TempLoginView,
    TempRegisterView,
    TempUserCreateView,
    JWTToSessionView,
    CustomTokenRefreshView,
    PasswordResetRequestView,
    PasswordResetConfirmView,
    PasswordChangeView,
    UserProfileView,
    LiuyaoCalculatorAPIView,
    LiuyaoViewSet,
    BaziViewSet,
    TongshuCalendarAPIView,
    TongshuCalendarAPIViewV2,
    Calendar10kAPIView,
    AccountDeletionRequestView,
    AppVersionView,
    number_analysis,
    liuyao_analysis,
    BaziReportView,
    NumberReportView,
    LiuYaoReportView,
    list_conversations,
    get_conversation,
    create_conversation_view,
    send_message,
    retry_message,
    list_liuyao_conversations,
    get_liuyao_conversation,
    create_liuyao_conversation_view,
    send_liuyao_message,
    retry_liuyao_message,
    get_conversation_config,
)
from .views_good_days import GoodDaysAPIView
from .views_person_relations import PersonRelationsAPIView

# Set up routers
liuyao_router = DefaultRouter()
bazi_router = DefaultRouter()
liuyao_router.register(r'liuyao', LiuyaoViewSet, basename='liuyao')
bazi_router.register(r'bazi', BaziViewSet, basename='bazi')

# Group all user-related endpoints under api/user/
urlpatterns = [
    # User endpoints
    path('user/register/', RegisterView.as_view(), name='register'),
    path('user/login/', LoginView.as_view(), name='login'),
    path('user/temp-create/', TempUserCreateView.as_view(), name='temp_user_create'),
    path('user/temp-login/', TempLoginView.as_view(), name='temp_login'),
    path('user/temp-register/', TempRegisterView.as_view(), name='temp_register'),
    path('user/jwt-to-session/', JWTToSessionView.as_view(), name='jwt_to_session'),
    path('user/token/refresh/', CustomTokenRefreshView.as_view(), name='token_refresh'),
    path('user/password/reset/', PasswordResetRequestView.as_view(), name='password_reset'),
    path('user/password/reset/confirm/', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('user/password/change/', PasswordChangeView.as_view(), name='password_change'),
    path('user/profile/', UserProfileView.as_view(), name='user_profile'),
    path('user/delete-account/', AccountDeletionRequestView.as_view(), name='account_deletion_request'),
    
    # Liuyao endpoints
    path('liuyao/calc/', LiuyaoCalculatorAPIView.as_view(), name='liuyao-calc'),
    path('liuyao/<int:pk>/analysis/', liuyao_analysis, name='liuyao-analysis'),
    path('liuyao/', include(liuyao_router.urls)),
    
    # Bazi endpoints
    path('bazi/', include(bazi_router.urls)),
    path('bazi/good-days/', GoodDaysAPIView.as_view(), name='bazi-good-days'),
    path('bazi/person-relations/', PersonRelationsAPIView.as_view(), name='bazi-person-relations'),
    
    # Conversation endpoints (nested under BaZi records)
    path('bazi/bazi/<int:person_id>/conversations/', list_conversations, name='list-conversations'),
    path('bazi/bazi/<int:person_id>/conversations/create/', create_conversation_view, name='create-conversation'),
    path('bazi/bazi/<int:person_id>/conversations/<int:conversation_id>/', get_conversation, name='get-conversation'),
    path('bazi/bazi/<int:person_id>/conversations/<int:conversation_id>/send/', send_message, name='send-message'),
    path('bazi/bazi/<int:person_id>/conversations/<int:conversation_id>/retry/', retry_message, name='retry-message'),
    
    # LiuYao conversation endpoints
    path('liuyao/<int:liuyao_id>/conversations/', list_liuyao_conversations, name='list-liuyao-conversations'),
    path('liuyao/<int:liuyao_id>/conversations/create/', create_liuyao_conversation_view, name='create-liuyao-conversation'),
    path('liuyao/<int:liuyao_id>/conversations/<int:conversation_id>/', get_liuyao_conversation, name='get-liuyao-conversation'),
    path('liuyao/<int:liuyao_id>/conversations/<int:conversation_id>/send/', send_liuyao_message, name='send-liuyao-message'),
    path('liuyao/<int:liuyao_id>/conversations/<int:conversation_id>/retry/', retry_liuyao_message, name='retry-liuyao-message'),
    
    # Conversation configuration endpoint
    path('conversations/config/', get_conversation_config, name='get-conversation-config'),
    
    # Tongshu endpoints - simplified to just calendar endpoint
    path('tongshu/calendar/', TongshuCalendarAPIView.as_view(), name='tongshu_calendar'),
    path('tongshu/calendar/v2/', TongshuCalendarAPIViewV2.as_view(), name='tongshu_calendar_v2'),
    
    # Calendar10k endpoint - yearly calendar with access restrictions
    path('calendar10k/', Calendar10kAPIView.as_view(), name='calendar10k'),
    
    # App version endpoints
    path('apps/<str:platform>/version/', AppVersionView.as_view(), name='app_version'),
    
    # Number endpoints
    path('number/<int:person_id>/analysis/', number_analysis, name='number_analysis'),
    
    # Report endpoints
    path('bazi/<int:pk>/report/', BaziReportView.as_view(), name='bazi_report'),
    path('number/<int:pk>/report/', NumberReportView.as_view(), name='number_report'),
    path('liuyao/<int:pk>/report/', LiuYaoReportView.as_view(), name='liuyao_report'),
]

app_name = 'api'
