# users/urls.py
from django.urls import path,include
from . import views
from django.contrib.auth import views as auth_views
# from .views import login_history_view
# ============================== For ANdroid DRF ==========================================
from .api_views import (
    RegisterAPIView,
    validate_referral_code,
    get_districts,
    get_states,
    login_api,
    set_pins_api,
    change_login_pin,
    change_transaction_pin,
    reset_login_pin,
    profile_view,
    logout_api,
    send_email_otp,
    verify_email_otp,
    upload_profile_picture
)
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from drf_yasg import openapi
from drf_yasg.views import get_schema_view
from django.urls import path
from accounts.schema import schema_view  # wherever your schema_view is defined

from .api_views import account_status_api
from dashboard.api_views import DashboardAPI
from payments.api_views import WalletSummaryAPI,TransactionHistoryAPI, TransactionDetailAPI

from .api_views import ProfileAPI, ManageRolesAPI
from notifications.api_views import NotificationListAPI, NotificationDetailAPI
from recharge.views.api_views import(
                            MobileInfoAPI,
                            OperatorsAPI,
                            CirclesAPI,
                            PlansAPI,
                            CheckPaymentOptionsAPI,
                            RazorpayCreateOrderAPI,
                            RazorpayVerifyPaymentAPI,
                            RechargePerformAPI,
                            RechargeStatusAPI,
                            RechargeHistoryAPI
)

from accounts.Unified_Payment_Refactored_Endpoints import (
    CheckPaymentOptionsView,
    InitiatePaymentView,
    VerifyPaymentView,
    PaymentPerformAPI
)

from users.views import ProfilePhotoUploadView
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

from payments.api_views import WalletTopupAPI

urlpatterns = [
    # Move these
    path('register/', views.register, name='register'),
    path('', views.login_view, name='login'),
    path('admin/', views.login_view, name='login'),
    # path('admin/', include('vadmin.urls')),
    # path('admin/dashboard/', include('dashboard.urls')),

    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
    path('set-pins/', views.set_pins, name='set_pins'),
    path('profile/', views.profile_view, name='profile'),
    path('manage-roles/', views.manage_roles, name='manage_roles'),
    path('login-history/', views.login_history_view, name='login_history'),

    # Password reset views
    path('reset-password/', auth_views.PasswordResetView.as_view(template_name='accounts/password_reset.html'), name='password_reset'),
    path('reset-password/done/', auth_views.PasswordResetDoneView.as_view(template_name='accounts/password_reset_done.html'), name='password_reset_done'),
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='accounts/password_reset_confirm.html'), name='password_reset_confirm'),
    path('reset/complete/', auth_views.PasswordResetCompleteView.as_view(template_name='accounts/password_reset_complete.html'), name='password_reset_complete'),
]


from payments.api_views import VerifyTransactionPinAPI
from accounts.api_views import need_set_pins_api  # adjust import
from utilities.views import ROfferAPI, DTHInfoAPI,BillsProvidersAPI, BillValidateAPI
# from payments.views import razorpay_callback
from accounts.api_views import UserByMobileQueryAPI, UserByMobilePathAPI

from accounts.views_payment import PaymentTransactionListAPI, PaymentTransactionDetailAPI
from accounts.views_recharge_summary import RechargePaymentSummaryListAPI, RechargePaymentSummaryDetailAPI
from accounts.views_recharge_tx import RechargeTransactionListAPI, RechargeTransactionDetailAPI
from accounts.views_combined import TransactionsViewAllAPI
from support.views import (
    TicketListCreateAPI,
    TicketDetailAPI,
    TicketCommentCreateAPI,
    TicketAttachmentUploadAPI,
    TicketQuickIntakeAPI,
)
from support.views_subjects import SubjectListCreateAPI, SubjectDetailAPI
from support.views_services import ServiceListCreateAPI, ServiceDetailAPI
from payments.api.views import WalletTopupAPI
from accounts.api_views import UserListAPI, UserExportExcelAPI
from django.urls import path, re_path
from accounts.views_admin import ( 
    AdminRechargeSnapshotAPI,
    AdminRechargeRefundAPI,
    AdminRechargeSnapshotV2API,
    AdminRechargeSnapshotV2cacheAPI,
    AdminRechargeRefundV2API,
    AdminRechargeRefundV2APIfromexcel,
    AdminRechargeOrderListV2API,
    AdminRechargeSetStatusV2API,


)
from accounts.views_admin_txns import AdminTransactionListAPI
from recharge.views.unified import goterpay_callback
from accounts.views_admin_v2 import OrderAuditListV2API, order_audit_v2_page
from accounts.paymentviews import PaymentInspectView
from accounts.views_bulk_inspect import BulkPaymentInspectView

from django.contrib.admin.views.decorators import staff_member_required
from accounts.paymentsummarypt import AdminSyncRPSView, AdminSyncRPSJSON, AdminPaymentAuditView


from geo.views import validate_pincode
from users.views import save_pincode
from accounts.api_views import ForceLogoutAPI

urlpatterns += [
    # ============================== For ANdroid DRF ==========================================

    path('api/register/', RegisterAPIView.as_view(), name='api_register'),
    path('api/validate-referral/', validate_referral_code, name='validate_referral_code'),
    path('api/get-districts/', get_districts, name='get_districts'),                 # ?state_id=9
    path('api/states/<int:state_id>/districts/', get_districts, name='state_dists'), # /states/9/districts/
    path('api/get-states/', get_states, name='get_states'),

    path('api/auth/need-set-pins/', need_set_pins_api, name='need_set_pins_api'),

    path('api/login/', login_api),
    path('api/set-pins/', set_pins_api),
    path('api/change-login-pin/', change_login_pin),
    path('api/change-transaction-pin/', change_transaction_pin),
    path('api/reset-login-pin/', reset_login_pin),
    path('api/profile/', profile_view),
    path('api/logout/', logout_api, name='api_logout'),
    # path("api/users/update-pincode/", update_pincode, name="update_pincode"),
    path("api/geo/validate-pincode/", validate_pincode),
    path("api/profile/pincode/", save_pincode),
    path("api/force-logout/", ForceLogoutAPI.as_view(), name="admin-force-logout"),




    path('api/send-email-otp/', send_email_otp),
    path('api/verify-email-otp/', verify_email_otp),
    path('api/upload-profile-pic/', upload_profile_picture),
    path('api/account-status', account_status_api, name='account_status_api'),
    path('api/dashboard/', DashboardAPI.as_view(), name='dashboard_api'),

    path('api/wallet/summary/', WalletSummaryAPI.as_view(), name='wallet_summary_api'),

    path("api/transactions", TransactionHistoryAPI.as_view(), name="transaction_history_api"),
    path("api/transaction/<str:txn_id>/", TransactionDetailAPI.as_view(), name="transaction_detail_api"),

    path("api/profile/", ProfileAPI.as_view(), name="profile_api"),
    path("api/manage-roles/", ManageRolesAPI.as_view(), name="manage_roles_api"),

    path("api/notifications/", NotificationListAPI.as_view(), name="api_notification_list"),
    path("api/notifications/<int:note_id>/", NotificationDetailAPI.as_view(), name="api_notification_detail"),

    path("api/recharge/mobile-info/", MobileInfoAPI.as_view(), name="mobile_info_api"),   # no trailing slash

    path("api/recharge/operators/", OperatorsAPI.as_view(), name="operators_api"),
    path("api/recharge/circles/",   CirclesAPI.as_view(),   name="circles_api"),
    path("api/recharge/plans/",     PlansAPI.as_view(),     name="plans_api"),

    path("api/recharge/r-offer/", ROfferAPI.as_view(), name="r_offer_api"),
    path("api/recharge/dth-info/", DTHInfoAPI.as_view(), name="dth_info_api"),


    path("api/bills/providers/", BillsProvidersAPI.as_view(), name="bills_providers"),
    path("api/bills/validate/", BillValidateAPI.as_view(), name="bills_validate"),

    # Not using mostly.. check and remove if not needed
    # =======================================================
    path("api/recharge/check_payment_options/", CheckPaymentOptionsAPI.as_view(), name="check_payment_options_api"),
    path("api/payments/razorpay/create_order/", RazorpayCreateOrderAPI.as_view(), name="razorpay_create_order"),
    path("api/payments/razorpay/verify/", RazorpayVerifyPaymentAPI.as_view(), name="razorpay_verify_payment"),
    path("api/recharge/perform/", RechargePerformAPI.as_view(), name="recharge_perform"),
    # =======================================================
    # =======================================================


    path("api/recharge/status/", RechargeStatusAPI.as_view(), name="recharge_status"),
    path("api/recharge/history/", RechargeHistoryAPI.as_view(), name="recharge_history"),

    # -----------------------   ✅ Refactored Endpoints   ----------------------------

    #On choosing the Prepaid plan card, this api will be used to get wallet balances, after checking 
    path("api/payment-options/", CheckPaymentOptionsView.as_view(), name="check_payment_options"),

    #Using for both Prepaid and postpaid/ billpay
    path("api/payments/initiate/", InitiatePaymentView.as_view(), name="initiate_payment"),
    
    path("api/payments/verify/", VerifyPaymentView.as_view(), name="verify_payment"),
    # path("api/payments/razorpay/callback/", razorpay_callback, name="razorpay_callback"),
    path("payments/inspect/", PaymentInspectView.as_view(), name="payment_inspect"),
    # path("payments/bulkinspect/", BulkPaymentInspectView.as_view(), name="payment_inspect"),
    path("payments/inspect/bulk/", BulkPaymentInspectView.as_view(), name="payment_inspect_bulk"),



    #Using for both Prepaid and postpaid/ billpay
    # On choosing the wallet pay only and making the pay.. this api will be called forprepaidd recharge with wallet only
    path("api/payments/perform/", PaymentPerformAPI.as_view(), name="payments_perform"),

    path("api/profile/photo/", ProfilePhotoUploadView.as_view(), name="profile-photo-upload"),


    # -----------------------   ✅ Refactored Endpoints   ----------------------------
    path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
    path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),

    path('api/wallets/topup/', WalletTopupAPI.as_view(), name='api_wallet_topup'),  # NEW API

    path("api/payments/verify-transaction-pin/", VerifyTransactionPinAPI.as_view(), name="verify_transaction_pin"),


  # 1) Export FIRST
    path("api/users/export.xlsx", UserExportExcelAPI.as_view(), name="user_export_excel"),

    # 2) Mobile path – restrict to digits to avoid collisions with words like "export.xlsx"
    re_path(r"^api/users/(?P<mobile>\d{7,15})/$", UserByMobilePathAPI.as_view(), name="user_by_mobile_path"),

    # 3) List last
    path("api/users/", UserListAPI.as_view(), name="user_list"),

    # /api/users/by-mobile/?mobile=9999999999
    path("api/users/by-mobile/", UserByMobileQueryAPI.as_view(), name="user_by_mobile_query"),

    # /api/users/9999999999/
    # path("api/users/<str:mobile>/", UserByMobilePathAPI.as_view(), name="user_by_mobile_path"),
    # path("api/users/", UserListAPI.as_view(), name="user_list"),  # <-- new

    # PaymentTransaction
    path("api/payments/", PaymentTransactionListAPI.as_view(), name="payments_list"),
    path("api/payments/<str:order_id>/", PaymentTransactionDetailAPI.as_view(), name="payments_detail"),

    # RechargePaymentSummary
    path("api/recharge-summaries/", RechargePaymentSummaryListAPI.as_view(), name="recharge_summaries_list"),
    path("api/recharge-summaries/<str:order_id>/", RechargePaymentSummaryDetailAPI.as_view(), name="recharge_summaries_detail"),

    # RechargeTransaction
    path("api/recharge-transactions/", RechargeTransactionListAPI.as_view(), name="recharge_transactions_list"),
    path("api/recharge-transactions/<str:order_id>/", RechargeTransactionDetailAPI.as_view(), name="recharge_transactions_detail"),

    # Combined
    path("api/transactions/view-all/", TransactionsViewAllAPI.as_view(), name="transactions_view_all"),


    path("api/support/tickets/intake/", TicketQuickIntakeAPI.as_view(), name="support_ticket_quick_intake"),
    path("api/support/tickets/", TicketListCreateAPI.as_view(), name="support_ticket_list_create"),
    path("api/support/tickets/<str:ticket_id>/", TicketDetailAPI.as_view(), name="support_ticket_detail"),
    path("api/support/tickets/<str:ticket_id>/comments/", TicketCommentCreateAPI.as_view(), name="support_ticket_comment_create"),
    path("api/support/tickets/<str:ticket_id>/attachments/", TicketAttachmentUploadAPI.as_view(), name="support_ticket_attachment_upload"),

    path("api/support/subjects/", SubjectListCreateAPI.as_view(), name="support_subjects_list_create"),
    path("api/support/subjects/<int:pk>/", SubjectDetailAPI.as_view(), name="support_subjects_detail"),
    path("api/support/services/", ServiceListCreateAPI.as_view(), name="support_services_list_create"),
    path("api/support/services/<int:pk>/", ServiceDetailAPI.as_view(), name="support_services_detail"),


    # path("api/wallet/topup/", WalletTopupAPI.as_view(), name="wallet_topup_api"),

    path("api/recharge/admin/snapshot/", AdminRechargeSnapshotAPI.as_view(), name="recharge_admin_snapshot"),
    path("api/recharge/admin/refund/", AdminRechargeRefundAPI.as_view(), name="recharge_admin_refund"),

    path("api/recharge/admin/v2/snapshot/", AdminRechargeSnapshotV2API.as_view(), name="recharge_admin_snapshot_v2"),
    path("api/recharge/admin/v2/snapshotcache/", AdminRechargeSnapshotV2cacheAPI.as_view(), name="recharge_admin_snapshot_v2"),
    path("api/recharge/admin/v2/refund/",   AdminRechargeRefundV2API.as_view(),   name="recharge_admin_refund_v2"),
    path("api/recharge/admin/v2/refundfromexcel/",   AdminRechargeRefundV2APIfromexcel.as_view(),   name="recharge_admin_refund_v2_fromexcel"),
    path("api/recharge/admin/v2/orders/",   AdminRechargeOrderListV2API.as_view(),name="recharge_admin_orders_v2"),
    path("api/recharge/admin/v2/status-set/", AdminRechargeSetStatusV2API.as_view(), name="recharge_admin_status_set_v2"),

    path("api/recharge/admin/v2/order-audit/", OrderAuditListV2API.as_view(), name="recharge_admin_order_audit_api"),
    path("recharge/order-audit/v2/", order_audit_v2_page, name="admin_recharge_order_audit_v2"),


    path("api/admin/transactions/", AdminTransactionListAPI.as_view(), name="admin_transactions"),

    path("callback/goterpay/", goterpay_callback, name="goterpay_callback"),

    path("tools/sync-rps/", staff_member_required(AdminSyncRPSView.as_view()), name="admin_sync_rps"),
    path("api/sync-rps/",  staff_member_required(AdminSyncRPSJSON.as_view()), name="admin_sync_rps_api"),
    path("tools/payment-audit/", staff_member_required(AdminPaymentAuditView.as_view()),name="admin_payment_audit"),

]


urlpatterns += [
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]

from django.conf import settings
from django.conf.urls.static import static




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


