"""questbanker_api URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
# from rest_framework_jwt.views import refresh_jwt_token  # Temporarily disabled for migrations
# from rest_framework_jwt.views import refresh_jwt_token  # Temporarily disabled for migrations
from organisations import views as organisations_views
from ledgers import views as ledgers_views
from users import views as user_views
from savings import views as savings_views

from locations  import views as location_views
from loans import views as loan_views
from general import views as general_views
from shares import views as shares_views

from customers import views as customer_views
from reports import views as reports_views
from exservices import views as exservices_views
from mmbanking import views as mmbanking_views
from ussdbanking import views as ussdbanking_views 
from mobileapp import views as mobileapp_views
from mobileapp.mobile_auth_views import (
    MobileAuthLoginView,
    MobileOfficerAuthLoginView,
    MobileAuthRegisterView,
    MobileAuthResetPinView,
    MobileAuthValidateTokenView,
    VerifyCustomerOTPView,
    MobilePortfolioSavingsView,
    MobilePortfolioLoansView,
    MobilePortfolioSharesView,
    MobilePortfolioTotalsView,
)
from mobileapp.mobile_portfolio_views import MobileSavingsAccountDetailView, MobileLoanAccountDetailView, MobileSharesDetailView
from mobileapp.officer_savings_views import (
    OfficerSavingsAccountsListView,
    OfficerSavingsAccountDetailView,
    OfficerSavingsDepositView,
    OfficerSavingsWithdrawalView,
    OfficerSavingsDailyTransactionsView,
    OfficerSavingsAccountTransactionsView,
)
from mobileapp.officer_loans_views import (
    OfficerLoanCustomerSearchView,
    OfficerLoanCustomerLoansView,
    OfficerLoanPaymentView,
    OfficerLoanCashAccountsView,
)
from inventory import views as inventory_views
from inventory.views import InventoryPayablesViewSet, InventoryPaymentsViewSet
from ussd import views as ussd_views
from integrations import views as integration_views
from overdraft import views as overdraft_views
from notifications import views as notifications_views
from custom_searches import views as custom_searches_views
from license import views as license_views
from fixed_asset import views as fixed_asset_views
from external_loans import views as external_loan_views
from loans.views import GreenFinanceValueChainViewSet, GreenFinanceValueChainNodeViewSet, LinesOfCreditReportFiltersDataView, LinesOfCreditReportFiltersView
# from loans.external_loan_views import ExternalLoanViewSet, ExternalLoanStatsView
from reports.views import GreenFinanceSummaryView, UNCDFDashboardView
from budgets.views import BudgetViewSet, BudgetAccountView
from chat import views as chat_views
from reports.views import GreenFinanceSummaryView, UNCDFDashboardView
from mmcharges.views import MobileMoneySettingsViewSet
from crb import views as crb_views

router = DefaultRouter()

router.register(r'staff', user_views.StaffView, basename='staff')
router.register(r'users', user_views.UserView, basename='users')
router.register(r'user-assigned-roles', user_views.UserAssignedRoleView, basename='user-assigned-roles')
router.register(r'audit-categories', user_views.AuditCategoryView, basename='audits')

router.register(r'customer-types', customer_views.CustomerTypesViewSet, basename='customer-type')
router.register(r'group-category', customer_views.GroupCategoriesViewSet, basename='group-category')
router.register(r'customer-registration-fields', customer_views.CustomerRegistrationFieldsViewSet, basename='customer-reg-fields')
router.register(r'customer-type-registration-fields', customer_views.CustomerTypeRegFieldsViewSet, basename='customer-type-reg-fields')
router.register(r'customers', customer_views.CustomersViewSet, basename='customers')
router.register(r'crops', customer_views.CropsViewSet, basename='crops')
router.register(r'crop-varieties', customer_views.CropVarietiesViewSet, basename='crop-varieties')
router.register(r'farming-history', customer_views.FarmingHistoryViewSet, basename='farming-history')
router.register(r'customer-search', custom_searches_views.CustomerSearchViewSet, basename='customer-search')
router.register(r'customer-mobile-banking-subscribers', custom_searches_views.CustomerMobileBankingSubscribers, basename='customer-mobile-banking-subscribers')
router.register(r'customer-card-search', custom_searches_views.CustomerCardSearchViewSet, basename='customer-card-search')
router.register(r'customer-status', custom_searches_views.CustomerStatusViewSet, basename='customer-status')
router.register(r'savings-account-search', custom_searches_views.SavingsAccountSearchViewSet, basename='savings-account-search')

router.register(r'customers-files', customer_views.CustomerFilesViewSet, basename='customers-files')
router.register(r'organisations', organisations_views.OrganisationView, basename='organisations')
router.register(r'system-components',organisations_views.SystemComponentView, basename='system-components')
router.register(r'user-roles',organisations_views.UserRoleView, basename='user-roles')
router.register(r'roles-components',organisations_views.RoleComponentView, basename='roles-component')
router.register(r'organisationbranches', organisations_views.OrganisationBranchView, basename='organisationbranches')
router.register(r'organisationtypes', organisations_views.OrganisationTypesView, basename='organisationtypes')
router.register(r'customer-reg-field-options', customer_views.CustomerRegFieldOptionsViewSet, basename='customer-reg-field-options')
router.register(r'organisationsubaccounts', ledgers_views.OrganisationSubAccountView, basename='organisationtypes')
router.register(r'organisation-settings', organisations_views.OrganisationSettingView, basename='organisation-settings')
router.register(r'groupmembers', customer_views.GroupMembersViewSet, basename='groupmembers')
router.register(r'groupcategorymembers', customer_views.GroupCategoryMembersViewSet, basename='groupcategorymembers')
router.register(r'finwise-group-customers', customer_views.FinwiseGroupCustomersViewSet, basename='finwise-group-customers')
router.register(r'groupmembers', customer_views.GroupMembersViewSet, basename='groupmembers')
router.register(r'finwise-group-customers', customer_views.FinwiseGroupCustomersViewSet, basename='finwise-group-customers')

router.register(r'region', location_views.RegionViewSet, basename='regions')
router.register(r'district', location_views.DistrictViewSet, basename='districts')
router.register(r'county', location_views.CountyViewSet, basename='counties')
router.register(r'subcounty', location_views.SubCountyViewSet, basename='subcounties')
router.register(r'parish', location_views.ParishViewSet, basename='parishes')
router.register(r'village', location_views.VillageViewSet, basename='villages')
router.register(r'customer-address', location_views.CustomerAddressViewSet, basename='customer-address')
router.register(r'location-view', location_views.LocationViewSet, basename='location-view')
router.register(r'bankaccounts', ledgers_views.BankAccountsView, basename='bankaccounts')
router.register(r'currencies', ledgers_views.CurrenciesView, basename='currencies')
router.register(r'cashaccounts', ledgers_views.CashAccountsView, basename='cashaccounts')
router.register(r'safeaccounts', ledgers_views.SafeAccountsView, basename='safeaccounts')
router.register(r'mobilemoneyaccounts', ledgers_views.MobileMoneyAccountsView, basename='mobilemoneyaccounts')
router.register(r'transactions', ledgers_views.SystemTransactionsView, basename='transactions')
router.register(r'transaction-details', ledgers_views.SystemTransactionDetailsView, basename='transaction-details')
router.register(r'tellercashledgers', ledgers_views.TellerCashLedgersView, basename='tellercashledger')
router.register(r'cashtransfers', ledgers_views.CashTransfersView, basename='cashtransfers')
router.register(r'crb-activation-requests', ledgers_views.CrbActivationRequestsView, basename='crb-activation-requests')
router.register(r'mytransfers', ledgers_views.MyTransfersView, basename='mytransfers')
router.register(r'creditors', ledgers_views.CreditorsView, basename='creditors')
router.register(r'creditorsupplies', ledgers_views.CreditorSuppliesView, basename='creditorsupplies')
router.register(r'creditorpayments', ledgers_views.CreditorPaymentsView, basename='creditorpayments')
router.register(r'debtors', ledgers_views.DebtorsView, basename='debtors')
router.register(r'debtorsupplies', ledgers_views.DebtorSuppliesView, basename='debtorsupplies')
router.register(r'debtorpayments', ledgers_views.DebtorPaymentsView, basename='debtorpayments')

router.register(r'saving-products', savings_views.SavingsProductView, basename='savingproducts')
router.register(r'saving-product-charges', savings_views.SavingProductChargeView, basename='saving-product-charges')
router.register(r'saving-product-custom-charges', savings_views.SavingProductCustomChargeView, basename='saving-product-charges')
router.register(r'saving-product-interest', savings_views.SavingProductInterestView, basename='saving-product-interest')

router.register(r'school-fees-payment-organisations', savings_views.SchoolFeesOrganIntegrationView, basename='school-payment-integration')
router.register(r'saving-accounts', savings_views.SavingAccountView, basename='saving-accounts')
router.register(r'saving-accounts-blocked-amount', savings_views.SavingsBlockedAmountView, basename='saving-accounts-blocked-amount')
router.register(r'bulk-savings-charge-initiation', savings_views.BulkSavingsChargeInitiationView, basename='bulk-savings-charge-initiation')
router.register(r'bulk-savings-charge-transactions', savings_views.BulkSavingsChargesTransactionsView, basename='bulk-savings-charge-transactions')
router.register(r'savings-product-interests-payments', savings_views.SavingsProductInterestPaymentView, basename='savings-product-interests-payments')
router.register(r'savings-interests-payment-transactions', savings_views.SavingsInterestPaymentTransactionView, basename='savings-product-interests-payments')
# mm charges
router.register(
    r'mobile-money-settings',
    MobileMoneySettingsViewSet,
    basename='mobile-money-settings'
)

router.register(r'saving-deposits', savings_views.SavingDepositsView, basename='saving-deposits')
router.register(r'saving-pending-withdrawals', savings_views.PendingWithdrawalsView,basename='saving-pending-withdrawals')
router.register(r'saving-account-closures', savings_views.SavingAccountClosureView, basename='saving-account-closures')
router.register(r'saving-withdrawals', savings_views.SavingWithdrawalsView,basename='saving-withdrawals')
router.register(r'saving-transfers', savings_views.SavingTransferView,basename='saving-transfers')
router.register(r'accountbookings', savings_views.AccountBookingsView, basename='accoungbookings')
router.register(r'fixed-deposits', savings_views.FixedDepositsView, basename='fixed-deposits')
router.register(r'customer-fixed-deposits', savings_views.CustomerFixedDepositsView, basename='customer-fixed-deposits')

router.register(r'loanproducts', loan_views.LoanProductView, basename='loanproducts')
router.register(r'loanproductcharges', loan_views.LoanProductChargesView, basename='loanproductcharges')
router.register(r'loanapplication', loan_views.LoanApplicationView, basename='loanapplication')
router.register(r'loanapplications', loan_views.ListLoanApplicationsView, basename='loanapplications')
router.register(r'loanapplicationincomesources', loan_views.LoanApplicationIncomeSourceView, basename='loanapplicationincomesources')
router.register(r'loanapplicationsecurity', loan_views.LoanApplicationSecurityView, basename='loanapplicationsecurity')
router.register(r'loanapplicationapproval', loan_views.LoanApplicationApprovalView, basename='loanapplicationapproval')
router.register(r'loanapplicationclientguarantors', loan_views.LoanApplicationClientGurantorsView, basename='loanapplicationclientguarantors')
router.register(r'organisationclientnonmembers', loan_views.OrganisationClientNonMembersView, basename='organisationclientnonmembers')
router.register(r'nonmemberloanguarantors', loan_views.NonMemberLoanGuarantorsView, basename='nonmemberloanguarantors')
router.register(r'loanwrittenoff', loan_views.LoanWrittenOffView, basename='loanwrittenoff')
router.register(r'loanpenalty', loan_views.LoanPenaltyView, basename='loanpenalty')
router.register(r'interestwaiver', loan_views.LoanInterestWaiveredView, basename='interestwaiver')
router.register(r'penaltywaiver', loan_views.LoanPenaltyWaiveredView, basename='penaltywaiver')
router.register(r'green-finance-value-chains', GreenFinanceValueChainViewSet, basename='greenfinancevaluechains')
router.register(r'green-finance-value-chain-nodes', GreenFinanceValueChainNodeViewSet, basename= 'greenfinancevaluechainnodes')

# External Loans - Enhanced functionality matching regular loans module
router.register(r'external-loanproducts', external_loan_views.ExternalLoanProductViewSet, basename='external-loanproducts')  # CRUD for external loan products
router.register(r'external-loanproduct-charges', external_loan_views.ExternalLoanProductChargesViewSet, basename='external-loanproduct-charges')  # Product charges and fees management
router.register(r'external-loansectors', external_loan_views.ExternalLoanSectorViewSet, basename='external-loansectors')  # Loan sector categorization
router.register(r'external-loanapplication', external_loan_views.ExternalLoanApplicationViewSet, basename='external-loanapplication')  # Main loan application CRUD
router.register(r'external-loanapplications', external_loan_views.ListExternalLoanApplicationsViewSet, basename='external-loanapplications')  # List/filter loan applications
router.register(r'external-loanapplicationssearchview', external_loan_views.ExternalLoanApplicationsViewView, basename='external-loanapplicationssearchview')  # Search loan applications
router.register(r'organisation-external-loans', external_loan_views.OrganisationExternalLoansViewSet, basename='organisation-external-loans')  # Organization's loan history
router.register(r'external-loanapplicationincomesources', external_loan_views.ExternalLoanApplicationIncomeSourceViewSet, basename='external-loanapplicationincomesources')  # Borrower income sources
router.register(r'external-loanapplicationsecurity', external_loan_views.ExternalLoanApplicationSecurityViewSet, basename='external-loanapplicationsecurity')  # Loan collateral/security
router.register(r'external-loanapplicationapproval', external_loan_views.ExternalLoanApprovalViewSet, basename='external-loanapplicationapproval')  # Loan approval workflow
router.register(r'external-loanapplicationclientguarantors', external_loan_views.ExternalLoanGuarantorsViewSet, basename='external-loanapplicationclientguarantors')  # Loan guarantors
router.register(r'external-loan-approvals', external_loan_views.ExternalLoanApprovalViewSet, basename='external-loan-approvals')  # Approval management
router.register(r'external-loan-disbursements', external_loan_views.ExternalLoanDisbursementViewSet, basename='external-loan-disbursements')  # Disbursement management
router.register(r'external-loan-schedules', external_loan_views.ExternalLoanRepaymentScheduleViewSet, basename='external-loan-schedules')  # Repayment schedules CRUD
router.register(r'external-loan-payment-transactions', external_loan_views.ExternalLoanPaymentTransactionViewSet, basename='external-loan-payment-transactions')  # Payment transactions
router.register(r'external-loan-payments', external_loan_views.ExternalLoanPaymentsViewSet, basename='external-loan-payments')  # Individual payment records
router.register(r'external-loan-penalties', external_loan_views.ExternalLoanPenaltyViewSet, basename='external-loan-penalties')  # Penalty management
router.register(r'external-loan-penalty-waivers', external_loan_views.ExternalLoanPenaltyWaiveredViewSet, basename='external-loan-penalty-waivers')  # Penalty waivers
router.register(r'external-loan-interest-waivers', external_loan_views.ExternalLoanInterestWaiveredViewSet, basename='external-loan-interest-waivers')  # Interest waivers
router.register(r'external-loan-rescheduled', external_loan_views.ExternalRescheduledLoansViewSet, basename='external-loan-rescheduled')  # Rescheduled loans
router.register(r'external-loan-topups', external_loan_views.ExternalLoanTopUpViewSet, basename='external-loan-topups')  # Loan top-ups
router.register(r'external-loan-writeoffs', external_loan_views.ExternalLoanWriteOffViewSet, basename='external-loan-writeoffs')  # Write-off management
router.register(r'external-loan-transfers', external_loan_views.ExternalLoanTransferViewSet, basename='external-loan-transfers')  # Loan officer transfers
router.register(r'external-loan-settings', external_loan_views.ExternalLoanSettingsViewSet, basename='external-loan-settings')  # Module settings
router.register(r'external-loan-guarantors', external_loan_views.ExternalLoanGuarantorsViewSet, basename='external-loan-guarantors')  # Guarantor management
router.register(r'external-loan-guarantor-securities', external_loan_views.ExternalLoanGuarantorsSecurityViewSet, basename='external-loan-guarantor-securities')  # Guarantor securities
router.register(r'external-loan-application-securities', external_loan_views.ExternalLoanApplicationSecurityViewSet, basename='external-loan-application-securities')  # Application securities
router.register(r'external-loan-income-sources', external_loan_views.ExternalLoanApplicationIncomeSourceViewSet, basename='external-loan-income-sources')  # Income sources
router.register(r'external-loan-transactions', external_loan_views.ExternalLoanMainTransactionsViewSet, basename='external-loan-transactions')  # All loan transactions
router.register(r'external-loan-recoveries', external_loan_views.ExternalLoanRecoveryViewSet, basename='external-loan-recoveries')  # Recovery management
router.register(r'external-loan-application-members', external_loan_views.ExternalLoanApplicationMemberViewSet, basename='external-loan-application-members')  # Member list management

router.register(r'loanapplicationssearchview', loan_views.LoanApplicationsViewView, basename='loanapplicationssearchview')
router.register(r'loansectors', loan_views.LoanSectorsView, basename='loansectors')
router.register(r'loan-sub-sectors', loan_views.LoanSubSectorsView, basename='loan-sub-sectors')
router.register(r'customer-loans', loan_views.CustomerLoansView, basename='customer-loans')

# shares end-points 
router.register(r'sharesettings', shares_views.SharesSettingsView, basename='sharesettings')
router.register(r'manage-shares-dividends', shares_views.ManageSharesDividendsView, basename='manage-shares-dividends')
router.register(r'list-shares-dividend-customers', shares_views.ListSharesDividendsCustomersView, basename='list-shares-dividend-customers')

# Fixed Deposit Reports
router.register(r'fixed-deposits-due', reports_views.FixedDepositsReportView, basename='fixed-deposits-due')
router.register(r'fixed-deposits-closed', reports_views.FixedDepositsClosedReportView, basename='fixed-deposits-closed')
router.register(r'fixed-deposits-outstanding', reports_views.FixedDepositsOutstandingReportView, basename='fixed-deposits-outstanding')

# Ex-Services
router.register(r'sms-types', exservices_views.SMSTypesView, basename='sms-types')

# sms end-points

router.register(r'organisation-sms-subscriptions', exservices_views.OrganisationSmsSubscriptionViewset, basename='organisation-sms-subscriptions')
router.register(r'member-sms-subscriptions', exservices_views.MemberSmsSubscriptionViewset, basename='member-sms-subscriptions')
router.register(r'sms-requests', exservices_views.SMSRequestViewset, basename='smsrequest')
router.register(r'user-sms', exservices_views.UserSmsViewset, basename='user-sms')
router.register(r'organisation-free-sms-award', exservices_views.OrganisationFreeSmsAwardView, basename='organisation-free-sms-award')

#router.register(r'free-sms-award', exservices_views.CustomerFreeSmsAwardViewset, basename='free-sms-award')

#ledger pending expenses
router.register(r'pending-ledger-expenses', ledgers_views.LedgerPendingExpensesViewset, basename='pending-expenses-approval')

# Mobile Banking
router.register(r'mobilebankingsubscription', mmbanking_views.MobileBankingSubscriptionView, basename='mobilebankingsubscription')
router.register(r'mm-loan-application', mobileapp_views.GroupLoanApplicationView, basename='mm-loan-application')

# Mobile Banking/App
router.register(r'mm-customers', mobileapp_views.MMCustomersViewSet, basename='mm-customers')
router.register(r'mm-groupmembers', mobileapp_views.MMGroupMembersViewSet, basename='mm-groupmembers')
router.register(r'mm-vsla-shares-settings', mobileapp_views.VslaSharesSettingsViewSet, basename='mm-vsla-shares-settings')
router.register(r'mm-vslasavings', mobileapp_views.MMGroupSavingsViewSet, basename='mm-vslasavings')
router.register(r'mm-vslashares', mobileapp_views.MMGroupSharesViewSet, basename='mm-vslashares')
router.register(r'mm-vsla-loan-settings', mobileapp_views.VslaLoanSettingsView, basename='mm-vsla-loan-settings')
router.register(r'mm-vsla-loan-payment', mobileapp_views.VslaLpanPaymentViewSet, basename='mm-vsla-loan-payment')
router.register(r'mm-agent-savings', mobileapp_views.AgentGroupSavingsViewSet, basename='mm-agent-savings')
router.register(r'vsla-Transfers', mobileapp_views.SavingsTransferViewSet, basename='vsla-Transfers')

router.register(r'mm-service-providers',ussdbanking_views.MMServiceProviderViewSet, basename='mm-service-providers')
router.register(r'mm-service-provider-tarrifs',ussdbanking_views.MMServiceProviderTarrifsViewSet, basename='mm-service-provider-tarrifs')

# Inventory   
router.register(r'productcategories', inventory_views.ProductCategoriesViewSet, basename='product-categories')
router.register(r'stocklist', inventory_views.StocksViewSet, basename='stock-list')
router.register(r'seasons', inventory_views.OrganisationSeasonViewSet, basename='organisation-season')
router.register(r'organisation-suppliers', inventory_views.OrganisationSuppliersViewSet, basename='organisation-suppliers')
router.register(r'inventory-payables', InventoryPayablesViewSet, basename='inventory-payables')
router.register(r'inventory-payments', InventoryPaymentsViewSet, basename='inventory-payments')
router.register(r'customer-requests', inventory_views.CustomerRequestViewSet, basename='customer-requests')
router.register(r'aggregated-requests', inventory_views.AggregatedRequestViewSet, basename='aggregated-requests')
#Over Draft Product
router.register(r'over-draft-products', overdraft_views.OverDraftProductViewSet, basename='over-draft-products')

#Over Drafts
router.register(r'over-drafts', overdraft_views.OverDraftViewSet, basename='over-drafts')

#USSD banking
router.register(r'ussd-banking-liquidation',ussdbanking_views.UssdBankingProcessLiquidationViewSet, basename='ussd-banking-liquidation')

# abi integration end-points
router.register(r'classifications',integration_views.ClassificationsView, basename='classifications')
router.register(r'classification-items',integration_views.ClassificationItemsView, basename='classification-items')
router.register(r'classification-item-loans',integration_views.ClassificationItemLoansView, basename='classification-item-loans')

# Notifications
router.register(r'notifications-types',notifications_views.NotificationTypesView,basename='notifications-types')

#new apps 
router.register(r'mm-loanapplication', mobileapp_views.MMLoanApplicationView, basename='mm-loanapplication')
router.register(r'app-customers', customer_views.MMCustomersViewSet, basename='app-customers')

#Fixed asset 
router.register(r'fixed-asset', fixed_asset_views.FixedAssetView, basename='fixed-assets')
router.register(r'fixed-asset-depreciation-rate', fixed_asset_views.FixedAssetConfigView, basename='fixed-asset-depreciation-rate')
router.register(r'get-depreciation-rate', fixed_asset_views.FixedAssetConfigListView, basename='get-depreciation-rate')
router.register(r'get-fixed-asset-list', fixed_asset_views.FixedAssetsListView, basename='get-fixed-asset-list')
router.register(r'depreciate-fixed-asset', fixed_asset_views.FixedAssetDepreciation, basename='depreciate-fixed-asset')
router.register(r'manual-depreciation', fixed_asset_views.ManualDepreciation, basename='manual-depreciation')
router.register(r'get-gl-acct-by-cd', fixed_asset_views.LedgerAccountByAccountCode, basename='get-gl-acct-by-cd')
router.register(r'fixed-asset-report', fixed_asset_views.FixedAssetReport, basename='fixed-asset-report')

# reconciliations
router.register(r'savings-reconciliations', savings_views.savingsReconciliation, basename='savings-reconciliations')
router.register(r'loans-reconciliations', loan_views.loansRecnciliation, basename='loans-reconciliations')
router.register(r'voucher-config', organisations_views.VoucherConfigViewSet, basename='voucher-config')
router.register(r'gnugrid-creditscore', integration_views.GnugridIntegration, basename='gnugrid-creditscore')

# obligations
router.register(r'savings-obligation', savings_views.CustomerOrganObligationsView, basename='savings-obligation')
router.register(r'customer-savings-obligation', savings_views.CustomerSubscribeObligationsView, basename='customer-savings-obligation')
# budgeting
router.register(r'budgets', BudgetViewSet, basename='budgets')
router.register(r'budget-accounts', BudgetAccountView, basename='budget-accounts')
#chatbot
router.register(r'rooms', chat_views.ChatRoomViewSet, basename='chatroom')
router.register(r'messages', chat_views.MessageViewSet, basename='message')
router.register(r'tickets', chat_views.SupportTicketViewSet, basename='supportticket')
router.register(r'members', chat_views.RoomMemberViewSet, basename='roommember')
router.register(r'direct-messages', chat_views.DirectMessageViewSet, basename='directmessage')
router.register(r'organisation-locations', organisations_views.OrganisationLocationViewSet, basename='organisation-locations')


urlpatterns = [
    path('api/', include(router.urls)),
    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls')),
    path('api/finwise-summary/', organisations_views.FinwiseSummaryView.as_view()),
    path('api/token-auth/', user_views.RestAPIJWT.as_view()), 
    path('api/verify-otp/', user_views.VerifyOTPView.as_view()), 
    path('api/verify-customer-otp/', VerifyCustomerOTPView.as_view()),
    path('api/lock-user-account/', user_views.LockUserAccountView.as_view()), 
    path('api/logout/', user_views.LogOutUserView.as_view()), 
    path('api/change-password/', user_views.ChangePasswordViewSet.as_view()),
    path('api/reset-password/', user_views.ResetPasswordView.as_view()),
    path('api/audit-trails/', user_views.SystemAuditLogAPIView.as_view()),
    
    #chat
    path('api/poll-updates/', chat_views.PollUpdatesView.as_view(), name='poll-updates'),
    path('api/search-users/', chat_views.UserSearchView.as_view(), name='search-users'),
    
    path('api/bulk-sms-subscription/', exservices_views.BulkSmsSubscriptionViewset.as_view()),

    path('api/send-sms/',exservices_views.SendSMSViewset.as_view()),
    
    path('api/switch-user/', general_views.SwitchUserView.as_view()), 
    path('api/switch-branch/', general_views.SwitchOrganisationBranch.as_view()), 
    path('api/switch-organisation/', general_views.SwitchOrganisation.as_view()), 
    path('api/group-org-customer-fields/', customer_views.GroupOrgCustomerRegFieldsViewSet.as_view()),
    path('api/org-components/', organisations_views.OrganisationComponentView.as_view()),
    path('api/org-type-components/', organisations_views.OrgTypeComponentView.as_view()),
    path('api/system-features/', organisations_views.SystemFeatureView.as_view()),
    path('api/organisation-features/',organisations_views.OrganisationFeatureView.as_view()),
    
    path('api/sms-general-settings/',exservices_views.SMSGeneralSettingsView.as_view()),
    path('api/organisation-general-settings/',organisations_views.GeneralSettingsView.as_view()),
    path('api/organisation-location-settings/',organisations_views.LocationSettingsView.as_view()),
    path('api/update-aggregator-assignement/',organisations_views.UpdateAggregatorAssignementView.as_view()),

    #working hours
    path('api/working-hours/',organisations_views.WorkingHoursView.as_view()),
    path('api/staff-working-hours/',organisations_views.StaffWorkingHoursView.as_view()),

    #EWallet settings
    path('api/password-settings/',organisations_views.PasswordSettingsView.as_view()),
    path('api/license-subscription-settings/',organisations_views.LicenseSettingView.as_view()),
    path('api/walletaccounts/',ledgers_views.OrganisationBranchWalletAccountsView.as_view()),

    path('api/staff-users/',user_views.StaffUsersView.as_view()),
    path('api/system-coas/', organisations_views.CustomCOAsView.as_view()),
    path('api/bulk-advanced-transactions/', ledgers_views.BulkTransactionsView.as_view(), name='bulk-advanced-transactions'),
    path('api/transactions-list/', ledgers_views.SystemTransactionsListView.as_view()),
    path('api/transactional-charts/', ledgers_views.SystemTransactionalChartsView.as_view()),
    path('api/role-assigned-users/',user_views.RolesAssignedUsersView.as_view()),
    path('api/activate-user-accounts/',user_views.ActivateUserAccountView.as_view()),
    path('api/save-saving-products-charges/', savings_views.SavingProductChargeAPIView.as_view()),
    path('api/bulk-saving-transfer/', savings_views.BulkSavingTranferView.as_view()),
    path('api/savingsledger/', savings_views.AccountTransactionsView.as_view()),
    path('api/groupsavings/', savings_views.GroupMembersSavingsView.as_view()),
    path('api/groupshares/', shares_views.GroupMemberssharesView.as_view()),
    path('api/interestspayments/', savings_views.InterestsPaymentsAPIView.as_view()),
    path('api/organisation-sub-accounts/', ledgers_views.OrganisationSubAccountChartView.as_view()),

    # Inventory 
    path('api/productlist/', inventory_views.ProductsAPIView.as_view()),
    path('api/organisation-supplier-orders/', inventory_views.ProductOrdersAPIView.as_view()),
    path('api/organisation-supplier-orders/<int:pk>/', inventory_views.ProductOrdersAPIView.as_view()),
    path('api/service-providers/', inventory_views.ServiceProvidersAPIView.as_view()),
    path('api/service-providers/<int:provider_id>/products/', inventory_views.ServiceProviderProductsAPIView.as_view()),

    path('api/ledger-incomes/', ledgers_views.LedgerIncomesView.as_view()),
    path('api/ledger-expenses/', ledgers_views.LedgerExpensesView.as_view()),
    path('api/loan-disbursement-active-accounts/',loan_views.LoanDisbursementActiveAccountsView.as_view()),
    path('api/loan-disbursement/',loan_views.LoanDisbursementView.as_view()),
    path('api/edit-loan-disbursement/',loan_views.EditLoanDisbursementView.as_view()),
    path('api/generate-loan-schedule/', loan_views.GenerateLoanScheduleView.as_view()),
    path('api/loan-schedule-with-payments/', loan_views.LoanScheduleWithPaymentsView.as_view()),
    path('api/loan-schedule-payment/', loan_views.LoanSchedulePaymentView.as_view()),
    path('api/loanrecovery/', loan_views.LoanRecoveryView.as_view()),
    path('api/loan-load-transfer/', loan_views.LoanCaseLoadTransferView.as_view()),
    path('api/customer-account-transfer/',customer_views.CustomerAccountsTransferViewSet.as_view()),

    path('api/reschedule-loan/', loan_views.RescheduleLoansView.as_view()),
    path('api/loan-topup/', loan_views.LoansTopUpView.as_view()),
    path('api/ledger-assets-liabilities-capital/', ledgers_views.LedgerAssetsLiabilitiesCapitalView.as_view()),
    path('api/loansledger/', loan_views.LoansLedgerView.as_view()),

    path('api/delete-loans/', loan_views.LoansDeleteView.as_view()),
    path('api/trash-loans/', loan_views.TrashLoansView.as_view()),
    path('api/trash-group-savings/', loan_views.TrashGroupSavingsView.as_view()),
    path('api/trash-savings/', loan_views.TrashSavingsView.as_view()),
    path('api/trash-shares/', loan_views.TrashSharesView.as_view()),
    path('api/trash-tb-transactions/', loan_views.TrashTBTransactionsView.as_view()),
    path('api/trash-customers/', loan_views.TrashCustomersView.as_view()),
    path('api/trash-fixed-deposits/', loan_views.TrashFixedDepositsView.as_view()),
    path('api/trash-inventory/', inventory_views.TrashInventoryView.as_view()),
    path('api/update-customers-images-url/', loan_views.UpdateCustomerImagesUrlsView.as_view()),

    path('api/loans-transaction-details/', loan_views.LoansTransactionDetailsView.as_view()),
    path('api/multiple-delete-loans/', loan_views.MultipleLoansDeleteView.as_view()),
    path('api/receivablecharts/', ledgers_views.ReceivableChartsAPIView.as_view(), name='receivable-charts'),
    path('api/bulk-salary-upload-transactions/', general_views.BulkSalaryImportTransactionsView.as_view(), name='bulk_salary_transactions'),
    path('api/bulk-salary-upload/', general_views.BulkSalaryImportView.as_view(), name='bulk_salary_upload'),
    path('api/bulk-salary-upload-initiation/', general_views.BulkSalaryUploadInitiationView.as_view(), name='bulk_salary_upload_initiation'),
    path('api/bulk-salary-upload-template/', general_views.BulkSalaryTemplateView.as_view(), name='bulk_salary_upload_template'),

    # To be removed 
    path('api/loans-filter/', loan_views.LoansFiltersDataView.as_view()),
    path('api/loans-add-missing-records/', loan_views.LoansAddMissingRecordsView.as_view()),
    path('api/loans-payments-csv/', loan_views.LoansAddPaymentsCSVView.as_view()),
    path('api/upload-loans-payments-csv/', loan_views.LoansPostPaymentsCSVView.as_view()),
    path('api/remove-loans-csv/', loan_views.RemoveLoansCSVView.as_view()),
    path('api/remove-payments-at-31/', loan_views.BDLoansRemovePaymentsCSVView.as_view()),
    path('api/back-date-payments-at-16/', loan_views.BDBackDatePaymentsCSVView.as_view()),
    path('api/back-date-loan-payments-as-at/', loan_views.BDBackLoanPaymentsCSVView.as_view()),
    path('api/loan-payments-as-at/', loan_views.LoanPaymentsCSVView.as_view()),
    path('api/update-customer-dob/', loan_views.UpdateCustomerDOBView.as_view()),


    # path('api/migrate-sopag-savings/', loan_views.MagrateMemberSaving.as_view()),
    # To be removed 

    # Reports
    path('api/dashboard-analytics/', reports_views.AnalyticDashBoardView.as_view()),
    path('api/sms-dashboard/', reports_views.smsDashBoardView.as_view()),
    path('api/ministry-report-overview/', reports_views.MinistryReportOverviewView.as_view(), name='ministry-report-overview'),
    path('api/ministry-report-settings/', reports_views.MinistryReportSettingsView.as_view(), name='ministry-report-settings'),
    path('api/ministry-report-settings/<int:pk>/', reports_views.MinistryReportSettingsView.as_view(), name='ministry-report-settings-detail'),
    path('api/ministry-report-preloaded/', reports_views.MinistryReportPreloadedDataView.as_view(), name='ministry-report-preloaded'),
    path('api/ministry-report-cache/', reports_views.MinistryReportCacheManagementView.as_view(), name='ministry-report-cache'),
    path('api/green-finance/summary', GreenFinanceSummaryView.as_view(), name='green-finance-summary'),
    path('api/dashboard/qdf-bmc-stats/', organisations_views.QdfBmcStatsView.as_view(), name='qdf-bmc-stats'),

    # UNCDF Partner Dashboard
    path('api/uncdf-dashboard/', UNCDFDashboardView.as_view(), name='uncdf-dashboard'),
    
    # UNCDF Partner Dashboard
    path('api/uncdf-dashboard/', UNCDFDashboardView.as_view(), name='uncdf-dashboard'),
    path('api/platform-summary-report/', organisations_views.PlatformSummaryReportView.as_view(), name='platform-summary-report'),
    path("api/organisation/<int:org_id>/profile", organisations_views.OrganisationProfileView.as_view()),
    path("api/organisation/<int:org_id>/finance-summary/", organisations_views.OrganisationFinanceSummary.as_view()),
    path('api/trial-balance/', reports_views.TrialBalanceView.as_view()),
    path('api/income-statement/', reports_views.IncomeStatementView.as_view()),
    path('api/balance-sheet/', reports_views.BalanceSheetView.as_view()),
    path('api/auto-penalty-cron-job/', general_views.LoanAutoPenaltyCronJobView.as_view()),
    path('api/auto-payments-cron-job/', general_views.LoanAutoPaymentsCronJobView.as_view()),
    path('api/fixed-deposit-cron-job/', general_views.FixedDepositCronJobView.as_view()),
    path('api/fixed-deposit-auto-closure-cron-job/', general_views.FixedDepositAutoClosureCronJobView.as_view()),
    path('api/auto-unblock-savings-cron-job/', general_views.AutoUnblockSavingCronJobView.as_view()),
    path('api/update-saving-account-status-cron-job/', general_views.UpdateSavingAccountStatusCronJobView.as_view()),
    path('api/queue-saving-interest-payments-cron-job/', general_views.SavingsProductQueueInterestPaymentCronJobView.as_view()),
    path('api/auto-db-back-up-cron-job/', general_views.AutoDBBackUpCronJobView.as_view()),
    path('api/loan-payment-reminder-cron-job/', general_views.LoanPaymentsReminderCronJobView.as_view()),
    path('api/customer-obligations-cron-job/', general_views.CustomerObligationsTransactionsCronJobView.as_view()),
    path('api/organisation-license-status-cron-job/', general_views.OrganisationLicenseStatusCronJobView.as_view()),

    # Transaction Soft Delete
    path('api/transactions-soft-delete/', general_views.TransactionSoftDeleteView.as_view()),

    path('api/loanwriteoff/',loan_views.LoanWriteOffView.as_view()),
    path('api/loan-loss-provisions/',loan_views.LoanLossProvisionView.as_view()),
    path('api/loan-report-filters/',loan_views.LoansReportFiltersView.as_view()),
    path('api/loan-tracking-report-data/',loan_views.LoansTrackingReportFiltersDataView.as_view()),
    path('api/loan-disbursement-report-data/',loan_views.LoansDisbursementReportFiltersDataView.as_view()),
    path('api/green-finance-loan-tracking-report-data/',loan_views.GreenLoansTrackingReportFiltersDataView.as_view()),
    path('api/loan-funders-report/', loan_views.LoanFundersReport.as_view()),
    path('api/lines-of-credit-report-data/', loan_views.LinesOfCreditReportFiltersDataView.as_view(), name="lines-of-credit-report"),
    path('api/lines-of-credit-report-filters/', LinesOfCreditReportFiltersView.as_view(), name="lines_of_credit_report_filters"),
    # new reports
    path('api/loan-arrear-report-data/',loan_views.LoansArrearsReportDataView.as_view()),
    path('api/par-report-data/',loan_views.ParReportDataView.as_view()),
    path('api/par-aging-report-data/',loan_views.ParAgingReportDataView.as_view()),
    path('api/loan-due-repayment-report-data/',loan_views.LoanDuesRepaymentReportFiltersDataView.as_view()),
    path('api/ageing-report-data/',loan_views.LoanAgeingReportFiltersDataView.as_view()),
    path('api/loan-expected-repayment-report-data/',loan_views.LoansExpectedRepaymentDataView.as_view()),
    path('api/write-off-report-data/',loan_views.WriteOffReportDataView.as_view()),
    path('api/written-off-report-data/',loan_views.WrittenOffReportDataView.as_view()),
    path('api/cleared-off-loans-report-data/',loan_views.LoansClearedOffReportFiltersDataView.as_view()),
    path('api/rescheduled-loans-report-data/',loan_views.RescheduledLoansReportFiltersDataView.as_view()),
    path('api/loan-repayment-report-data/',loan_views.LoansRepaymentReportFiltersDataView.as_view()),
    path('api/loan-performing-report-data/',loan_views.LoansPerformingReportDataView.as_view()),
    path('api/loan-savings-report-data/',loan_views.LoanSavingsReportFiltersDataView.as_view()),
    path('api/loan-interest-waiver-report/',loan_views.LoanInterestWaiverReportView.as_view()),
    path('api/loan-penalty-waiver-report/',loan_views.LoanPenaltyWaiverReportView.as_view()),

    # end new reports

    # Being updated 
    # path('api/loan-arrear-report-data/',loan_views.LoansArrearsReportFiltersDataView.as_view()),
    # path('api/ageing-report-data/',loan_views.AgeingReportFiltersDataView.as_view()),
    # path('api/par-report-data/',loan_views.ParReportFiltersDataView.as_view()),
    path('api/loans-clear-off-report-data/',loan_views.ToBeClearedOffLoansReportFiltersDataView.as_view()),
    #path('api/cleared-off-loans-report-data/',loan_views.ClearedOffLoansReportFiltersDataView.as_view()),
    # path('api/loan-expected-repayment-report-data/',loan_views.LoansExpectedRepaymentFiltersDataView.as_view()),
    # path('api/loan-due-repayment-report-data/',loan_views.LoanDueRepaymentReportFiltersDataView.as_view()),
    #path('api/written-off-report-data/',loan_views.WrittenOffReportFiltersDataView.as_view()),
    #path('api/write-off-report-data/',loan_views.WriteOffReportFiltersDataView.as_view()),
    # path('api/loan-repayment-report-data/',loan_views.LoansRepaymentReportFiltersDataView.as_view()),
    # Being updated

    path('api/org-customer-fields-meta-data/', customer_views.CustomerRegFieldsMetaDataViewSet.as_view()),

    # Savings reports
    path('api/savings-report-filters/',reports_views.SavingsReportFiltersView.as_view()),
    path('api/saving-account-balances/',reports_views.SavingsAccountBalancesView.as_view()),
    path('api/savings-cache/refresh/',reports_views.SavingsBalanceCacheRefreshView.as_view()),
    path('api/saving-settings-data/',savings_views.SavingsSettingsDataView.as_view()),
    path('api/group-saving-account-balances/',reports_views.GroupSavingsAccountBalancesView.as_view()),
    path('api/saving-account-status-report/',reports_views.SavingsAccountStatusReportView.as_view()),

    # shares end-points
    path('api/manage-shares/',shares_views.ManageSharesView.as_view()),
    path('api/manage-shares/<int:pk>/', shares_views.ManageSharesView.as_view()),
    path('api/import-share-dividends/',shares_views.ImportShareDividendsView.as_view()),
    path('api/sharesledger/', shares_views.SharesLedgerView.as_view()),

    #Savings Data migration
    path('api/savings-migration/',general_views.BulkSavingImportView.as_view()),
   
    #Savings Data migration trasactions
    path('api/savings-migration-transactions/',general_views.BulkSavingImportTransactionsView.as_view()),

    #Savings Deposit Data migration
    path('api/bulk-client-deposit-migration/',general_views.BulkClientSavingDepositImportView.as_view()),
    
    #Savings Deposit Data migration trasactions 
    path('api/bulk-client-deposit-transactions/',general_views.BulkClientSavingImportTransactionsView.as_view()),
    path('api/bulk-client-negative-deposit-transactions/',general_views.BulkNegativeSavingsImportView.as_view()),

    #Share Data migration
    path('api/shares-migration/',general_views.BulkShareImportView.as_view()),
    
    #Savings Data migration trasactions
    path('api/shares-migration-transactions/',general_views.BulkSharesImportTransactionsView.as_view()),
    
    #Over Draft Data Migration
    path('api/over-draft-migration/',general_views.BulkOverDraftImportView.as_view()),
    #Over Draft Data Migration Transactions
    path('api/over-draft-migration-transactions/',general_views.BulkOverDraftImportTransactionsView.as_view()),
    
    # data import 
    path('api/bulk-import-initiation/',general_views.BulkImportInitiationView.as_view()),

    # withhold savings/shared
    path('api/withhold-savings-shares/',loan_views.WithHoldSavingsSharesView.as_view()),

    # customer account balances 
    path('api/customer-saving-account-balances/',savings_views.SavingsAccountBalancesView.as_view()),
    path('api/loan-penalties-schedule/',loan_views.LoanPenaltySchedule.as_view()),

    #Fixed Deposits Data migration
    path('api/fixed-deposits-migration/',general_views.BulkFixedDepositImportView.as_view()),
   
    #Fixed Deposits Data migration trasactions 
    path('api/fixed-deposits-migration-transactions/',general_views.BulkFixedDepositImportTransactionsView.as_view()),

    #SMS subscription Data migration
    path('api/sms-subscription-migration/',general_views.BulkSmsSubscriptionImportView.as_view()),

    path('api/sms-migration-transactions/',general_views.BulkSmsImportTransactionsView.as_view()),

    #MM Banking subscription Data migration
    path('api/mm-subscription-migration/',general_views.BulkMMSubscriptionImportView.as_view()),
    path('api/mm-migration-transactions/',general_views.BulkMMBankingImportTransactionsView.as_view()),

    #Client Photos Data migration
    path('api/client-photos-migration/',general_views.BulkClientPhotosImportView.as_view()),
    path('api/client-photos-migration-transactions/',general_views.BulkClientPhotosImportTransactionsView.as_view()),

    path('api/customer-card/', customer_views.CustomerCardView.as_view()),
    path('api/customer-card-profile/', customer_views.CustomerCardProfileView.as_view()),

    #Customer Fields Data migration
    path('api/customer-fields-migration/',general_views.BulkCustomerFieldsImportView.as_view()),
    path('api/customer-fields-migration-transactions/',general_views.BulkCustomerFieldsImportTransactionsView.as_view()),

    #Member Email Update migration
    path('api/member-email-migration/', general_views.BulkMemberEmailImportView.as_view()),
    path('api/member-email-migration-transactions/', general_views.BulkMemberEmailImportTransactionsView.as_view()),

    # Mobile app
    path('api/mobile-app-dashboard/',mobileapp_views.AppDashboardView.as_view()),
    path('api/mm-group-loans/',mobileapp_views.GroupLoansView.as_view()),
    path('api/mm-customer-groups/',mobileapp_views.CustomerGroupView.as_view()),
    path('api/mm-generate-loan-schedule/', mobileapp_views.GroupGenerateLoanScheduleView.as_view()),
    path('api/mm-loan-schedule-with-payments/', mobileapp_views.GroupLoanScheduleWithPaymentsView.as_view()),
    #new URL
     path('api/mm-vsla-transfer/', mobileapp_views.VslaTransferView.as_view()),
     path('api/mm-transactions-list/', mobileapp_views.MMSystemTransactionsListView.as_view()),
     path('api/mm-group-member-loans/',mobileapp_views.getLoansTransactionsView.as_view()),
     path('api/mm-loan-products/',mobileapp_views.LoanProductsView.as_view()),
     path('api/mm-Loan-Repayments/',mobileapp_views.MMLoansRepaymentReportFiltersDataView.as_view()),
     
     path('api/mm-vsla-member-loans/',mobileapp_views.VslaMemberLoansView.as_view()),
     path('api/mm-vsla-loan-products/',mobileapp_views.VslaLoanProductsView.as_view()),

    path('api/mm-vsla-transfer/', mobileapp_views.VslaTransferView.as_view()),
    path('api/mm-transactions-list/', mobileapp_views.MMSystemTransactionsListView.as_view()),
    path('api/mm-group-member-loans/',mobileapp_views.getLoansTransactionsView.as_view()),
    path('api/mm-loan-products/',mobileapp_views.LoanProductsView.as_view()),
    path('api/mm-Loan-Repayments/',mobileapp_views.MMLoansRepaymentReportFiltersDataView.as_view()),
     
    path('api/mm-vsla-member-loans/',mobileapp_views.VslaMemberLoansView.as_view()),
    path('api/mm-vsla-loan-products/',mobileapp_views.VslaLoanProductsView.as_view()),

    # Mobile App Authentication
    path('api/mobile-auth/login/', MobileAuthLoginView.as_view(), name='mobile-auth-login'),
    path('api/mobile-auth/officer/login/', MobileOfficerAuthLoginView.as_view(), name='mobile-auth-officer-login'),
    path('api/mobile-auth/register/', MobileAuthRegisterView.as_view(), name='mobile-auth-register'),
    path('api/mobile-auth/reset-pin/', MobileAuthResetPinView.as_view(), name='mobile-auth-reset-pin'),
    path('api/mobile-auth/validate-token/', MobileAuthValidateTokenView.as_view(), name='mobile-auth-validate-token'),

    # Mobile App Portfolio Sections (decoupled from login)
    path('api/mobileapp-saving-accounts/', savings_views.MobileAppSavingAccountsView.as_view(), name='mobileapp-saving-accounts'),
    path('api/account-merge-requests/', savings_views.AccountMergeRequestView.as_view(), name='account-merge-requests'),
    path('api/mobile-portfolio/savings/', MobilePortfolioSavingsView.as_view(), name='mobile-portfolio-savings'),
    path('api/mobile-portfolio/loans/', MobilePortfolioLoansView.as_view(), name='mobile-portfolio-loans'),
    path('api/mobile-portfolio/shares/summary/', MobilePortfolioSharesView.as_view(), name='mobile-portfolio-shares-summary'),
    path('api/mobile-portfolio/totals/', MobilePortfolioTotalsView.as_view(), name='mobile-portfolio-totals'),
    
    # Mobile App Portfolio Details
    path('api/mobile-portfolio/savings/<int:account_id>/', MobileSavingsAccountDetailView.as_view(), name='mobile-savings-detail'),
    path('api/mobile-portfolio/loans/<int:loan_id>/', MobileLoanAccountDetailView.as_view(), name='mobile-loan-detail'),
    path('api/mobile-portfolio/shares/', MobileSharesDetailView.as_view(), name='mobile-shares-detail'),

    # Officer Savings Module
    path('api/officer/savings/accounts/', OfficerSavingsAccountsListView.as_view(), name='officer-savings-accounts'),
    path('api/officer/savings/accounts/<int:account_id>/', OfficerSavingsAccountDetailView.as_view(), name='officer-savings-account-detail'),
    path('api/officer/savings/deposit/', OfficerSavingsDepositView.as_view(), name='officer-savings-deposit'),
    path('api/officer/savings/withdrawal/', OfficerSavingsWithdrawalView.as_view(), name='officer-savings-withdrawal'),
    path('api/officer/savings/transactions/daily/', OfficerSavingsDailyTransactionsView.as_view(), name='officer-savings-daily-transactions'),
    path('api/officer/savings/accounts/<int:account_id>/transactions/', OfficerSavingsAccountTransactionsView.as_view(), name='officer-savings-account-transactions'),

    # Officer Loans Module
    path('api/officer/loans/customers/search/', OfficerLoanCustomerSearchView.as_view(), name='officer-loans-customer-search'),
    path('api/officer/loans/customers/loans/', OfficerLoanCustomerLoansView.as_view(), name='officer-loans-customer-loans'),
    path('api/officer/loans/payment/', OfficerLoanPaymentView.as_view(), name='officer-loans-payment'),
    path('api/officer/loans/cash-accounts/', OfficerLoanCashAccountsView.as_view(), name='officer-loans-cash-accounts'),

    # Mobile Banking. customer-groups
    path('api/mm-banking-login/', mmbanking_views.MMBankingLoginView.as_view()),
    path('api/mm-group-members/', mmbanking_views.MMBankingGroupMembersView.as_view()),
    path('api/mm-member-account-balances/', mmbanking_views.MMBankingGroupMemberBalancesView.as_view()),
    path('api/mm-member-shares-balances/', mmbanking_views.MMBankingGroupMemberSharesView.as_view()),

    path('api/mm-member-vsla-balances/', mmbanking_views.VslaMMBankingGroupMemberBalancesView.as_view()),
    path('api/mm-member-vsla-shares/', mmbanking_views.VslaMMMemberShareBalancesView.as_view()),
    path('api/mm-vlsa-shares-config/', mmbanking_views.VslaSharesSettingsView.as_view()),
    path('api/mm-vsla-product-update/', mmbanking_views.VslaloanSettingsActionsView.as_view()),
    path('api/mm-vsla-loan-actions/', mmbanking_views.MMVslaloanActionsView.as_view()),
    path('api/mm-member-vsla-loan-pay/', mmbanking_views.VslaLoanProfileView.as_view()),
    path('api/mm-savingsledger/', mmbanking_views.MMAccountTransactionsView.as_view()),

    # USSD Banking
    path('api/number-verify/', ussdbanking_views.USSDBankingVerifyNumberView.as_view()),
    path('api/ussd-banking-member-savings/', ussdbanking_views.USSDBankingMemberSavingsView.as_view()),
    path('api/ussd-banking-member-loans/', ussdbanking_views.USSDBankingMemberLoansView.as_view()),    
    path('api/ussd-banking-member-shares/', ussd_views.UssdBankingMemberSharesView.as_view()),
    path('api/ussd-banking-initiate-deposit/', ussdbanking_views.UssdBankingInitiateDepositView.as_view()),
    path('api/process-payments/', ussdbanking_views.UssdBankingProcessDepositView.as_view()),
    path("api/qdf-wallets/", ussdbanking_views.QdfWalletsView.as_view(), name="qdf_wallets"),
    path("api/qdf-members-summary/", ussdbanking_views.QdfMembersSummaryView.as_view(), name="qdf_members_summary"),
    path("api/ewallet-balances/", ussdbanking_views.EwalletBalancesView.as_view(), name="ewallet_balances"),
    path("api/org-wallet-transactions/<int:organisation_id>/", ussdbanking_views.OrgWalletTransactionsView.as_view(), name="org_wallet_transactions"),
    path('api/ussd-initiate-withdraw/', ussdbanking_views.UssdInitiateWithdrawViewSet.as_view()),
    

    # Organisation and Member Wallet Ops
    path('api/org-wallet-initiate-deposit/', ussdbanking_views.OrgWalletInitiateDepositView.as_view()),
    path('api/org-wallet-withdraw/', ussdbanking_views.OrgWalletWithdrawView.as_view()),
    path('api/org-wallet-disburse/', ussdbanking_views.OrgWalletDisburseView.as_view()),
    path('api/member-wallet-withdraw/', ussdbanking_views.MemberWalletWithdrawView.as_view()),
    path('api/member-wallet-deposit/', ussdbanking_views.MemberWalletDepositView.as_view()),
    path('api/yo-cash-in-webhook/', ussdbanking_views.YoCashInWebhookView.as_view()),

    # flexi-pay integration end-points 
    path('api/request-to-validate-sacco-customer/', integration_views.SaccoCustomerValidationViewSet.as_view()),
    path('api/request-to-deposit/', integration_views.RequestToDepositViewSet.as_view()),
    path('api/request-to-withdraw/', integration_views.RequestToWithdrawViewSet.as_view()),
    path('api/request-to-validate-withdraw-limit/', integration_views.RequestToValidateBalanceViewSet.as_view()),
    path('api/payment-settlement/', integration_views.RequestToSettleSchoolFeesPaymentViewSet.as_view()),

    # surepay - school fees
    path('api/school-fees-search-student/', integration_views.SchoolFeesSearchStudentViewSet.as_view()),
    path('api/school-fees-make-payment/', integration_views.MakeFeesPaymentViewSet.as_view()),
    path('api/ussd-school-fees-search-student/', ussdbanking_views.SchoolFeesSearchStudentViewSet.as_view()),
    path('api/ussd-school-fees-make-payment/', ussdbanking_views.MakeFeesPaymentViewSet.as_view()),

    # Over-draft payments
    path('api/process-over-draft-payments/', overdraft_views.OverDraftPaymentCronJobView.as_view()),
    path('api/manual-over-draft-payments/', overdraft_views.ManualOverDraftPaymentView.as_view()),

    # Shares Report Generation
    path('api/generate-sharesreport/', shares_views.GenerateSharesReportView.as_view()),
    path('api/sharesreport/', shares_views.SharesReportView.as_view()),
    path('api/nonshareholdersreport/',shares_views.NonShareHoldersReportView.as_view()),
    path('api/shares-transfer-report/',shares_views.SharesTransferReportView.as_view()),

    # VAS - Value Added Services
    path('api/receipts/', include('vas.urls')),
    
    # External Loans - Complete loan management functionality
    path('api/external-loans/disbursement/active-accounts/', external_loan_views.ExternalLoanDisbursementActiveAccountsView.as_view(), name='external-loans-disbursement-active-accounts'),  # Get available accounts for disbursement
    path('api/external-loans/disbursement/', external_loan_views.ExternalLoanDisbursementView.as_view(), name='external-loans-disbursement'),  # Process loan disbursement
    path('api/external-loans/schedules/generate/', external_loan_views.GenerateExternalLoanScheduleView.as_view(), name='external-loans-schedules-generate'),  # Generate repayment schedules
    path('api/external-loans/schedules/with-payments/', external_loan_views.ExternalLoanScheduleWithPaymentsView.as_view(), name='external-loans-schedules-with-payments'),  # View schedules with payments
    path('api/external-loan-disbursement-active-accounts/', external_loan_views.ExternalLoanDisbursementActiveAccountsView.as_view(), name='external-loan-disbursement-active-accounts'),  # Get available accounts for disbursement
    path('api/external-loan-disbursement/', external_loan_views.ExternalLoanDisbursementView.as_view(), name='external-loan-disbursement'),  # Process loan disbursement with schedule generation
    path('api/edit-external-loan-disbursement/', external_loan_views.EditExternalLoanDisbursementView.as_view(), name='edit-external-loan-disbursement'),
    path('api/external-generate-loan-schedule/', external_loan_views.GenerateExternalLoanScheduleView.as_view(), name='external-generate-loan-schedule'),  # Generate repayment schedules (flat/declining/amortization)
    path('api/external-loan-schedule-with-payments/', external_loan_views.ExternalLoanScheduleWithPaymentsView.as_view(), name='external-loan-schedule-with-payments'),  # View schedules with payment status
    path('api/external-loan-schedule-payment/', external_loan_views.ExternalLoanSchedulePaymentView.as_view(), name='external-loan-schedule-payment'),  # Process loan payments (principal/interest/penalty)
    path('api/external-loanrecovery/', external_loan_views.ExternalLoanRecoveryView.as_view(), name='external-loanrecovery'),  # Process recovery payments
    path('api/external-loanwriteoff/', external_loan_views.ExternalLoanWriteOffListView.as_view(), name='external-loanwriteoff'),  # List loans eligible for write-off
    path('api/reschedule-external-loan/', external_loan_views.RescheduleExternalLoansView.as_view(), name='reschedule-external-loan'),  # Reschedule loans with new terms
    path('api/external-loan-topup/', external_loan_views.ExternalLoansTopUpView.as_view(), name='external-loan-topup'),  # Process loan top-ups
    path('api/external-loansledger/', external_loan_views.ExternalLoansLedgerView.as_view(), name='external-loansledger'),  # View loan ledger/statement
    path('api/delete-external-loans/', external_loan_views.DeleteExternalLoanView.as_view(), name='delete-external-loans'),  # Delete external loan applications

    # path('api/silk/', include('silk.urls', namespace='silk')),

    # Notifications
    path('api/notification-subscriptions/', notifications_views.NotificationSubscriptionsViewset.as_view()),
    path('api/notifications/', notifications_views.NotificationsView.as_view()),
    path('api/user-notifications/', notifications_views.UserNotificationsView.as_view()),
    
    # License Subscriptions
    path('api/organisation-license/',license_views.LicenseSubscriptionView.as_view()),
    path('api/license-renewal/',license_views.LicensePaymentsView.as_view()),
    #merge charts of accounts
    path('api/merg-charts-transactions/',ledgers_views.MergeChartsAccountsView.as_view()),


    # public user registration 
    path('api/public-customer-registration', user_views.PublicMemberRegistration.as_view()),

    # Fixed Assets route 
    # path('api/get-depreciation-rate/', fixed_asset_views.FixedAssetConfigView.get_queryset())

    # new ussd implementation
    path('api/ussd/', ussd_views.UssdMenu.as_view()),

    # CRB Credit Enquiry endpoints
    path('api/crb/credit-enquiry/', crb_views.CreditEnquiryView.as_view(), name='crb-credit-enquiry'),
    path('api/crb/credit-report/', crb_views.CreditReportView.as_view(), name='crb-credit-report'),
    path('api/crb/kyc-enquiry/', crb_views.KYCEnquiryView.as_view(), name='crb-kyc-enquiry'),
    path('api/crb/kyc-report/', crb_views.KYCReportView.as_view(), name='crb-kyc-report'),
    path('api/crb/check-profile/', crb_views.CheckProfileView.as_view(), name='crb-check-profile'),

    # Chat routes
    # path('api/chat/', include('chat.urls')),

]

