
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import users, payments, schemes
from .views.geo import (
    CountryAdminViewSet,
    StateAdminViewSet,
    DistrictAdminViewSet,
    MandalAdminViewSet,
    PincodeAdminViewSet,
    FranchiseStoreAdminViewSet,
    FranchiseAssignmentAdminViewSet,
    StoreTransferLedgerAdminViewSet,
)
from apps.accounts.views_occupation import OccupationAdminViewSet
from apps.accounts.views_role import RoleAdminViewSet
from apps.platform.settings.views import QRConfigViewSet, BranchViewSet

router = DefaultRouter()
router.register(r'countries', CountryAdminViewSet, basename='admin-countries')
router.register(r'states', StateAdminViewSet, basename='admin-states')
router.register(r'districts', DistrictAdminViewSet, basename='admin-districts')
router.register(r'mandals', MandalAdminViewSet, basename='admin-mandals')
router.register(r'pincodes', PincodeAdminViewSet, basename='admin-pincodes')
router.register(r'franchise-stores', FranchiseStoreAdminViewSet, basename='admin-franchise-stores')
router.register(r'franchise-assignments', FranchiseAssignmentAdminViewSet, basename='admin-franchise-assignments')
router.register(r'store-transfers', StoreTransferLedgerAdminViewSet, basename='admin-store-transfers')
router.register(r'occupations', OccupationAdminViewSet, basename='admin-occupations')
router.register(r'roles', RoleAdminViewSet, basename='admin-roles')
router.register(r'qr-config', QRConfigViewSet, basename='admin-qr-config')
router.register(r'branches', BranchViewSet, basename='admin-branches')
from .views.wallet import (
    AdminTWMCoinGrantCreateView,
    AdminTWMCoinGrantListView,
    AdminWalletLedgerListView,
    AdminWalletListView,
    WalletConsistencyCheckView,
)
from .views.system_stats import SystemStatsView
from .views.distribution_metrics import AdminDistributionMetricsView
from apps.business.products.views import ProductAdminViewSet
from apps.business.schemes.views import OpportunityBundleViewSet, OpportunityBundleLevelViewSet, OpportunityBundleDistributionViewSet, RankAdminViewSet
from apps.business.power_stream.views import PowerStreamConfigAdminViewSet
from apps.business.withdrawals.views import (
    WithdrawalDeductionConfigAdminViewSet,
    AdminWithdrawalRequestListView,
    AdminWithdrawalRequestActionView,
    AdminWithdrawalBulkActionView,
    AdminWithdrawalApprovedExportView,
    AdminWithdrawalBulkPaidUploadView,
)
from api.v1.admin.platform_settings import AdminPlatformSettingsView
from apps.business.lucky_dip.views import LuckyDipAdminViewSet
from apps.business.wallet.views import ConversionRuleAdminViewSet
from .views.ambassadors import BrandAmbassadorListView
from .views.notifications import (
    AdminNotificationCampaignDeleteView,
    AdminNotificationCampaignListCreateView,
    AdminNotificationCampaignSendNowView,
    AdminProcessScheduledNotificationsView,
)
from .views.whatsapp import AdminWhatsAppMessageLogView, AdminWhatsAppSendView
from .views.email_configs import AdminEmailConfigActivateView, AdminEmailConfigDetailView, AdminEmailConfigListCreateView
from .views.role_access import AdminRolePageAccessView
from .views.kyc import AdminKYCRequestDetailView, AdminKYCRequestListView
from .views.orders import (
    AdminOrderListView,
    AdminOrderDetailView,
    AdminOrderFulfillmentUpdateView,
    AdminOrderPaymentReviewView,
    AdminOrderExportView,
)
from .views.distributors import AdminDistributorPositionListView, AdminDistributorPositionUserDetailView
from .views.binary_admin import (
    AdminBinaryAnalysisListView,
    AdminBinaryAnalysisDetailView,
    AdminBinaryTreeView,
    AdminBinaryRebuildView,
    AdminBinaryIntegrityView,
    AdminPowerStreamForfeitureView,
)
from .views.feature_flags import AdminFeatureFlagListView, AdminFeatureFlagUpdateView
from .views.vendors import AdminVendorDetailView, AdminVendorListCreateView
from .views.vendor_commercials import (
    AdminVendorContractsListView,
    AdminVendorContractDetailView,
    AdminPricingMappingsListView,
    AdminPricingMappingDetailView,
    AdminCommercialDashboardView,
)
from .views.leads import (
    AdminLeadSubmissionListView,
    AdminLeadSubmissionDetailView,
    AdminLeadSubmissionStatusUpdateView,
)
from apps.company.views import CompanyMemberViewSet

router.register(r'company-members', CompanyMemberViewSet, basename='admin-company-members')
from .views.support import (
    AdminSupportTicketAssignView,
    AdminSupportTicketDetailView,
    AdminSupportTicketListView,
    AdminSupportTicketMetricsView,
    AdminSupportTicketReplyView,
    AdminSupportTicketStatusUpdateView,
)
from .marketplace_analytics import AdminMarketplaceAnalyticsView
from apps.telemetry.views import (
    AdminTelemetryAlertsView,
    AdminTelemetryCohortsView,
    AdminTelemetryFunnelsView,
    AdminTelemetryOverviewView,
    AdminTelemetryRetentionView,
    AdminTelemetrySeedJobsView,
)
from apps.business.distributor.urls import admin_urlpatterns as distributor_admin_urlpatterns

router.register(r'products', ProductAdminViewSet, basename='admin-products')
router.register(r'opportunity-bundles', OpportunityBundleViewSet, basename='admin-opportunity-bundles')
router.register(r'opportunity-bundle-levels', OpportunityBundleLevelViewSet, basename='admin-opportunity-bundle-levels')
router.register(r'opportunity-bundle-distributions', OpportunityBundleDistributionViewSet, basename='admin-opportunity-bundle-distributions')
router.register(r'ranks', RankAdminViewSet, basename='admin-ranks')
router.register(r'power-stream-configs', PowerStreamConfigAdminViewSet, basename='admin-power-stream-configs')
router.register(r'lucky-dip', LuckyDipAdminViewSet, basename='admin-lucky-dip')
router.register(r'withdrawal-deduction-configs', WithdrawalDeductionConfigAdminViewSet, basename='admin-withdrawal-deduction-configs')
router.register(r'conversion-rules', ConversionRuleAdminViewSet, basename='admin-conversion-rules')



urlpatterns = [
    path('', include(router.urls)),
    path('', include((distributor_admin_urlpatterns, 'distributor-admin'))),
    path('wallets/', AdminWalletListView.as_view(), name='admin-wallets-list'),
    path('wallets/ledger/', AdminWalletLedgerListView.as_view(), name='admin-wallets-ledger-list'),
    path('wallets/twm-coins/grants/', AdminTWMCoinGrantListView.as_view(), name='admin-wallet-twm-grants'),
    path('wallets/twm-coins/grant/', AdminTWMCoinGrantCreateView.as_view(), name='admin-wallet-twm-grant-create'),
    path('users/', users.UserListView.as_view(), name='admin-users'),
    path('users/<str:id>/', users.UserDetailView.as_view(), name='admin-user-detail'),
    path('payments/', payments.AdminPaymentListView.as_view(), name='admin-payments'),
    path('schemes/<uuid:id>/levels/', schemes.SchemeLevelsConfigAPIView.as_view(), name='admin-opportunity_bundle-levels'),
    path('schemes/<uuid:id>/distribution/', schemes.SchemeDistributionConfigAPIView.as_view(), name='admin-opportunity_bundle-distribution'),
    path('schemes/<uuid:id>/power-stream/', schemes.SchemePowerStreamConfigAPIView.as_view(), name='admin-opportunity_bundle-power-stream'),
    path('distribution/metrics/', AdminDistributionMetricsView.as_view(), name='admin-distribution-metrics'),
    path('wallet/consistency-check/', WalletConsistencyCheckView.as_view(), name='admin-wallet-consistency-check'),
    path('system/stats/', SystemStatsView.as_view(), name='admin-system-stats'),
    path('platform-settings/', AdminPlatformSettingsView.as_view(), name='admin-platform-settings'),
    path('ambassadors/', BrandAmbassadorListView.as_view(), name='admin-ambassadors'),
    path('executive_directors/', BrandAmbassadorListView.as_view(), name='admin-executive-directors'),
    path('notifications/campaigns/', AdminNotificationCampaignListCreateView.as_view(), name='admin-notification-campaigns'),
    path('notifications/campaigns/<uuid:campaign_id>/send-now/', AdminNotificationCampaignSendNowView.as_view(), name='admin-notification-campaign-send-now'),
    path('notifications/campaigns/<uuid:campaign_id>/', AdminNotificationCampaignDeleteView.as_view(), name='admin-notification-campaign-delete'),
    path('notifications/process-scheduled/', AdminProcessScheduledNotificationsView.as_view(), name='admin-notification-process-scheduled'),
    path('whatsapp/send/', AdminWhatsAppSendView.as_view(), name='admin-whatsapp-send'),
    path('whatsapp/messages/', AdminWhatsAppMessageLogView.as_view(), name='admin-whatsapp-messages'),
    path('email-configs/', AdminEmailConfigListCreateView.as_view(), name='admin-email-configs-list-create'),
    path('email-configs/<uuid:config_id>/', AdminEmailConfigDetailView.as_view(), name='admin-email-configs-detail'),
    path('email-configs/<uuid:config_id>/activate/', AdminEmailConfigActivateView.as_view(), name='admin-email-configs-activate'),
    path('role-page-access/', AdminRolePageAccessView.as_view(), name='admin-role-page-access'),
    path('kyc/requests/', AdminKYCRequestListView.as_view(), name='admin-kyc-requests'),
    path('kyc/requests/<uuid:kyc_id>/', AdminKYCRequestDetailView.as_view(), name='admin-kyc-request-detail'),
    path('orders/', AdminOrderListView.as_view(), name='admin-orders-list'),
    path('orders/export/', AdminOrderExportView.as_view(), name='admin-orders-export'),
    path('orders/<uuid:order_id>/', AdminOrderDetailView.as_view(), name='admin-order-detail'),
    path('orders/<uuid:order_id>/fulfillment/', AdminOrderFulfillmentUpdateView.as_view(), name='admin-order-fulfillment-update'),
    path('orders/<uuid:order_id>/payment-review/', AdminOrderPaymentReviewView.as_view(), name='admin-order-payment-review'),
    path('distributor-positions/', AdminDistributorPositionListView.as_view(), name='admin-distributor-positions'),
    path('distributor-positions/user/<str:user_id>/', AdminDistributorPositionUserDetailView.as_view(), name='admin-distributor-positions-user'),
    # ── Binary tree admin endpoints ───────────────────────────────────────────
    path('binary-analysis/', AdminBinaryAnalysisListView.as_view(), name='admin-binary-analysis'),
    path('binary-analysis/<uuid:distributor_id>/', AdminBinaryAnalysisDetailView.as_view(), name='admin-binary-analysis-detail'),
    path('binary-tree/<uuid:distributor_id>/', AdminBinaryTreeView.as_view(), name='admin-binary-tree'),
    path('binary-rebuild/', AdminBinaryRebuildView.as_view(), name='admin-binary-rebuild'),
    path('binary-integrity/', AdminBinaryIntegrityView.as_view(), name='admin-binary-integrity'),
    path('power-stream-forfeiture/', AdminPowerStreamForfeitureView.as_view(), name='admin-ps-forfeiture'),
    # ── Feature flags ─────────────────────────────────────────────────────────
    path('feature-flags/', AdminFeatureFlagListView.as_view(), name='admin-feature-flags'),
    path('feature-flags/<str:feature_key>/', AdminFeatureFlagUpdateView.as_view(), name='admin-feature-flag-update'),
    path('vendors/', AdminVendorListCreateView.as_view(), name='admin-vendors-list-create'),
    path('vendors/<uuid:vendor_id>/', AdminVendorDetailView.as_view(), name='admin-vendor-detail'),
    path('vendor-contracts/', AdminVendorContractsListView.as_view(), name='admin-vendor-contracts-list'),
    path('vendor-contracts/<uuid:contract_id>/', AdminVendorContractDetailView.as_view(), name='admin-vendor-contract-detail'),
    path('vendor-pricing-mappings/', AdminPricingMappingsListView.as_view(), name='admin-vendor-pricing-mappings-list'),
    path('vendor-pricing-mappings/<uuid:pricing_id>/', AdminPricingMappingDetailView.as_view(), name='admin-vendor-pricing-mapping-detail'),
    path('vendor-commercial-dashboard/', AdminCommercialDashboardView.as_view(), name='admin-vendor-commercial-dashboard'),
    path('withdrawals/', AdminWithdrawalRequestListView.as_view(), name='admin-withdrawals-list'),
    path('withdrawals/<int:pk>/action/', AdminWithdrawalRequestActionView.as_view(), name='admin-withdrawal-action'),
    path('withdrawals/bulk-action/', AdminWithdrawalBulkActionView.as_view(), name='admin-withdrawal-bulk-action'),
    path('withdrawals/export/approved/', AdminWithdrawalApprovedExportView.as_view(), name='admin-withdrawals-export-approved'),
    path('withdrawals/upload/paid/', AdminWithdrawalBulkPaidUploadView.as_view(), name='admin-withdrawals-upload-paid'),
    path('support/tickets/', AdminSupportTicketListView.as_view(), name='admin-support-tickets-list'),
    path('support/tickets/metrics/', AdminSupportTicketMetricsView.as_view(), name='admin-support-tickets-metrics'),
    path('support/tickets/<uuid:ticket_id>/', AdminSupportTicketDetailView.as_view(), name='admin-support-ticket-detail'),
    path('support/tickets/<uuid:ticket_id>/reply/', AdminSupportTicketReplyView.as_view(), name='admin-support-ticket-reply'),
    path('support/tickets/<uuid:ticket_id>/status/', AdminSupportTicketStatusUpdateView.as_view(), name='admin-support-ticket-status'),
    path('support/tickets/<uuid:ticket_id>/assign/', AdminSupportTicketAssignView.as_view(), name='admin-support-ticket-assign'),
    path('leads/', AdminLeadSubmissionListView.as_view(), name='admin-leads-list'),
    path('leads/<uuid:lead_id>/', AdminLeadSubmissionDetailView.as_view(), name='admin-lead-detail'),
    path('leads/<uuid:lead_id>/status/', AdminLeadSubmissionStatusUpdateView.as_view(), name='admin-lead-status-update'),
    # ── Marketplace analytics ─────────────────────────────────────────────────
    path('marketplace-analytics/', AdminMarketplaceAnalyticsView.as_view(), name='admin-marketplace-analytics'),
    # ── Telemetry analytics infrastructure ────────────────────────────────────
    path('analytics/overview/', AdminTelemetryOverviewView.as_view(), name='admin-analytics-overview'),
    path('analytics/cohorts/', AdminTelemetryCohortsView.as_view(), name='admin-analytics-cohorts'),
    path('analytics/retention/', AdminTelemetryRetentionView.as_view(), name='admin-analytics-retention'),
    path('analytics/funnels/', AdminTelemetryFunnelsView.as_view(), name='admin-analytics-funnels'),
    path('analytics/alerts/', AdminTelemetryAlertsView.as_view(), name='admin-analytics-alerts'),
    path('analytics/seed-jobs/', AdminTelemetrySeedJobsView.as_view(), name='admin-analytics-seed-jobs'),
]
