from django.urls import path
from rest_framework_simplejwt.views import TokenRefreshView
from .views import (
    AdminRegistrationView,
    VendorRegistrationView,
    BuyerRegistrationView,
    LoginView,
    VerifyLoginOTPView,
    ResendLoginOTPView,
    LogoutView,
    UserProfileView,
    CheckPhoneView,
    CheckEmailView,
    VerifyEmailView,
    ResendVerificationEmailView,
    FollowVendorView,
    UnfollowVendorView,
    FollowingListView,
    FollowersListView,
    CheckFollowStatusView,
    VendorsPublicListView,
    VendorPublicProfileView,
    # Admin views
    AdminUsersListView,
    AdminUserDetailView,
    AdminVendorsListView,
    AdminVendorDetailView,
    AdminStatsView,
    ChangePasswordView,
    ForgotPasswordView,
    VerifyForgotPasswordOTPView,
    ResetPasswordView,
    # Google OAuth views
    GoogleAuthView,
    GoogleLinkView,
    GoogleUnlinkView,
    # Delivery settings views
    VendorDeliverySettingsView,
    VendorDeliveryZonesView,
    VendorDeliveryZoneDetailView,
    PublicVendorDeliveryInfoView,
    # Business hours & gallery views
    VendorBusinessHoursView,
    VendorGalleryView,
    VendorGalleryPhotoDetailView,
    # Bulk email views
    AdminBulkEmailVendorsView,
    AdminBulkEmailImportView,
    AdminBulkEmailPreviewExcelView,
    AdminBulkEmailCampaignsView,
    AdminBulkEmailCampaignDetailView,
)

urlpatterns = [
    # Registration endpoints
    path('register/admin/', AdminRegistrationView.as_view(), name='admin-register'),
    path('register/vendor/', VendorRegistrationView.as_view(), name='vendor-register'),
    path('register/buyer/', BuyerRegistrationView.as_view(), name='buyer-register'),

    # Auth endpoints - Email + Password login with OTP verification
    path('login/', LoginView.as_view(), name='login'),
    path('login/verify/', VerifyLoginOTPView.as_view(), name='login-verify-otp'),
    path('login/resend-otp/', ResendLoginOTPView.as_view(), name='login-resend-otp'),
    path('logout/', LogoutView.as_view(), name='logout'),
    path('token/refresh/', TokenRefreshView.as_view(), name='token-refresh'),

    # Email verification endpoints
    path('email/verify/', VerifyEmailView.as_view(), name='verify-email'),
    path('email/resend/', ResendVerificationEmailView.as_view(), name='resend-verification'),

    # Profile endpoint
    path('profile/', UserProfileView.as_view(), name='user-profile'),
    path('password/change/', ChangePasswordView.as_view(), name='change-password'),
    path('password/forgot/', ForgotPasswordView.as_view(), name='forgot-password'),
    path('password/forgot/verify/', VerifyForgotPasswordOTPView.as_view(), name='forgot-password-verify'),
    path('password/reset/', ResetPasswordView.as_view(), name='reset-password'),

    # Validation endpoints
    path('check-phone/', CheckPhoneView.as_view(), name='check-phone'),
    path('check-email/', CheckEmailView.as_view(), name='check-email'),

    # Public vendors list
    path('vendors/', VendorsPublicListView.as_view(), name='vendors-public-list'),

    # Vendor delivery settings (must come BEFORE vendor/<str:vendor_slug>/ catch-all)
    path('vendor/delivery-settings/', VendorDeliverySettingsView.as_view(), name='vendor-delivery-settings'),
    path('vendor/delivery-zones/', VendorDeliveryZonesView.as_view(), name='vendor-delivery-zones'),
    path('vendor/delivery-zones/<int:zone_id>/', VendorDeliveryZoneDetailView.as_view(), name='vendor-delivery-zone-detail'),

    # Vendor business hours & gallery (must come BEFORE vendor/<str:vendor_slug>/ catch-all)
    path('vendor/business-hours/', VendorBusinessHoursView.as_view(), name='vendor-business-hours'),
    path('vendor/gallery/', VendorGalleryView.as_view(), name='vendor-gallery'),
    path('vendor/gallery/<int:photo_id>/', VendorGalleryPhotoDetailView.as_view(), name='vendor-gallery-photo-detail'),

    # Public delivery info
    path('vendor/<str:vendor_slug>/delivery/', PublicVendorDeliveryInfoView.as_view(), name='public-vendor-delivery-info'),

    # Public vendor profile (catch-all, must come AFTER specific vendor/ routes)
    path('vendor/<str:vendor_slug>/', VendorPublicProfileView.as_view(), name='vendor-public-profile'),

    # Follow endpoints
    path('follow/<int:vendor_id>/', FollowVendorView.as_view(), name='follow-vendor'),
    path('unfollow/<int:vendor_id>/', UnfollowVendorView.as_view(), name='unfollow-vendor'),
    path('following/', FollowingListView.as_view(), name='following-list'),
    path('followers/', FollowersListView.as_view(), name='followers-list'),
    path('follow-status/<int:vendor_id>/', CheckFollowStatusView.as_view(), name='check-follow-status'),

    # Admin management endpoints
    path('admin/users/', AdminUsersListView.as_view(), name='admin-users-list'),
    path('admin/users/<int:user_id>/', AdminUserDetailView.as_view(), name='admin-user-detail'),
    path('admin/vendors/', AdminVendorsListView.as_view(), name='admin-vendors-list'),
    path('admin/vendors/<int:vendor_id>/', AdminVendorDetailView.as_view(), name='admin-vendor-detail'),
    path('admin/stats/', AdminStatsView.as_view(), name='admin-stats'),

    # Admin bulk email endpoints
    path('admin/bulk-email/vendors/', AdminBulkEmailVendorsView.as_view(), name='admin-bulk-email-vendors'),
    path('admin/bulk-email/import/', AdminBulkEmailImportView.as_view(), name='admin-bulk-email-import'),
    path('admin/bulk-email/preview-excel/', AdminBulkEmailPreviewExcelView.as_view(), name='admin-bulk-email-preview-excel'),
    path('admin/bulk-email/campaigns/', AdminBulkEmailCampaignsView.as_view(), name='admin-bulk-email-campaigns'),
    path('admin/bulk-email/campaigns/<int:campaign_id>/', AdminBulkEmailCampaignDetailView.as_view(), name='admin-bulk-email-campaign-detail'),

    # Google OAuth endpoints
    path('google/', GoogleAuthView.as_view(), name='google-auth'),
    path('google/link/', GoogleLinkView.as_view(), name='google-link'),
    path('google/unlink/', GoogleUnlinkView.as_view(), name='google-unlink'),
]
