from shop_management.views.reports.warehouse_profit import WarehouseProfitReportView
from django.urls import path, include
from rest_framework.routers import DefaultRouter

from shop_management.views.data.utils import (
    UnitViewSet,
    CurrencyViewSet,
    ExchangeRateViewSet,
)
from shop_management.views.data.shop import ShopViewSet
from shop_management.views.data.customer import CustomerViewSet
from shop_management.views.data.customer_balance_payment import CustomerBalancePaymentViewSet
from shop_management.views.data.customer_debtor import CustomerDebtorViewSet
from shop_management.views.data.product import ProductViewSet, ProductPriceViewSet, CategoryViewSet, export_all_products
from shop_management.views.data.purchase import PurchaseViewSet
from shop_management.views.data.purchase_payment import PurchasePaymentViewSet
from shop_management.views.data.sale import SaleViewSet
from shop_management.views.data.sale_payment import SalePaymentViewSet
from shop_management.views.data.stock import StockViewSet, StockTransferViewSet
from shop_management.views.data.supplier import SupplierViewSet
from shop_management.views.data.supplier_balance_payment import SupplierBalancePaymentViewSet
from shop_management.views.data.quotation import QuotationViewSet
from shop_management.views.data.daily_diary_log import DailyDiaryLogViewSet
from shop_management.views.data.sale_return import SaleReturnViewSet
from shop_management.views.data.purchase_return import PurchaseReturnViewSet
from shop_management.views.reports.financial_report import FinancialReportView
from shop_management.views.reports.comprehensive_purchase_report import ComprehensivePurchaseReportView
from shop_management.views.reports.comprehensive_sale_report import comprehensive_sale_report
from shop_management.views.reports.customer_report import customer_report
from shop_management.views.reports.supplier_report import supplier_report
from shop_management.views.reports.cash_flow_report import CashFlowReportView
from shop_management.views.reports.daily_diary_summary import DailyDiarySummaryView
from shop_management.views.reports.daily_diary_report import DailyDiaryReportView
from shop_management.views.reports.accounting_reports import AccountingReportView
from shop_management.views.reports.aging_report import AgingReportView
from shop_management.views.reports.sales_performance import SalesPerformanceReportView
from shop_management.views.reports.purchase_analysis import PurchaseAnalysisReportView
from shop_management.views.reports.inventory_reports import InventoryReportView
from shop_management.views.reports.finance_reports import FinanceReportView
from shop_management.views.reports.party_statements import PartyStatementReportView
from shop_management.views.data.employee import EmployeeViewSet
from shop_management.views.data.advance import AdvanceViewSet
from shop_management.views.data.passive_income import PassiveIncomeViewSet
from shop_management.views.data.payroll import PayrollViewSet
from shop_management.views.data.expense import ExpenseViewSet, ExpenseCategoryViewSet
from shop_management.views.data.shop_account import AccountViewSet
from shop_management.views.data.account_transaction import AccountTransactionViewSet
from shop_management.views.data.account_transfer import AccountTransferViewSet
from shop_management.views.data.organization import (
    CompanySettingViewSet,
    WarehouseViewSet,
)
from shop_management.views.data.inventory import (
    InventoryBatchViewSet,
    StockBalanceViewSet,
    StockMovementViewSet,
)
from shop_management.views.data.stock_adjustment import StockAdjustmentViewSet
from shop_management.views.data.opening_inventory import OpeningInventoryView, OpeningInventoryTemplateView
from shop_management.views.data.supplier_payment import SupplierPaymentViewSet
from shop_management.views.data.customer_payment import CustomerPaymentViewSet
from shop_management.views.data.warehouse_transfer import WarehouseTransferViewSet
from shop_management.views.data.accounting import LedgerAccountViewSet
from shop_management.views.data.journal import JournalEntryViewSet
from shop_management.views.data.notification import OperationalAlertViewSet
from shop_management.views.data.dashboard import DashboardSummaryView
from shop_management.views.data.opening_balance import FinancialOpeningBalanceViewSet


router = DefaultRouter()

router.register(r"units", UnitViewSet, basename="units")
router.register(r"currencies", CurrencyViewSet, basename="currencies")
router.register(r"exchange-rates", ExchangeRateViewSet, basename="exchange-rates")
router.register(r"company-settings", CompanySettingViewSet, basename="company-settings")
router.register(r"warehouses", WarehouseViewSet, basename="warehouses")
router.register(r"inventory-batches", InventoryBatchViewSet, basename="inventory-batches")
router.register(r"stock-balances", StockBalanceViewSet, basename="stock-balances")
router.register(r"stock-movements", StockMovementViewSet, basename="stock-movements")
router.register(r"stock-adjustments", StockAdjustmentViewSet, basename="stock-adjustments")
router.register(r"shop", ShopViewSet, basename="shop")
router.register(r"customers", CustomerViewSet, basename="customers")
router.register(
    r"customer-balance-payments",
    CustomerBalancePaymentViewSet,
    basename="customer-balance-payments",
)
router.register(
    r"customer-debtors",
    CustomerDebtorViewSet,
    basename="customer-debtors",
)

router.register(r"categories", CategoryViewSet, basename="categories")
router.register(r"products", ProductViewSet, basename="products")
router.register(r"product-prices", ProductPriceViewSet, basename="product-prices")
router.register(r"purchases", PurchaseViewSet, basename="purchases")
router.register(
    r"purchase-payments", PurchasePaymentViewSet, basename="purchase-payments"
)
router.register(r"supplier-payments", SupplierPaymentViewSet, basename="supplier-payments")
router.register(r"customer-payments", CustomerPaymentViewSet, basename="customer-payments")
router.register(r"warehouse-transfers", WarehouseTransferViewSet, basename="warehouse-transfers")
router.register(r"sales", SaleViewSet, basename="sales")
router.register(r"sale_payments", SalePaymentViewSet, basename="sale_payments")
router.register(r"stocks", StockViewSet, basename="stocks")
router.register(r"stock-transfers", StockTransferViewSet, basename="stock-transfers")
router.register(r"suppliers", SupplierViewSet, basename="suppliers")
router.register(
    r"supplier-balance-payments",
    SupplierBalancePaymentViewSet,
    basename="supplier-balance-payments",
)
router.register(r"quotations", QuotationViewSet, basename="quotations")
router.register(r"daily-diary", DailyDiaryLogViewSet, basename="daily-diary")
router.register(r"sale-returns", SaleReturnViewSet, basename="sale-returns")
router.register(r"purchase-returns", PurchaseReturnViewSet, basename="purchase-returns")

router.register(r"employees", EmployeeViewSet, basename="employees")
router.register(r"advances", AdvanceViewSet, basename="advances")
router.register(r"passive-incomes", PassiveIncomeViewSet, basename="passive-incomes")
router.register(r"payrolls", PayrollViewSet, basename="payrolls")
router.register(r"expense-categories", ExpenseCategoryViewSet, basename="expense-categories")
router.register(r"expenses", ExpenseViewSet, basename="expenses")
router.register(r"accounts", AccountViewSet, basename="accounts")
router.register(r"ledger-accounts", LedgerAccountViewSet, basename="ledger-accounts")
router.register(r"journal-entries", JournalEntryViewSet, basename="journal-entries")
router.register(r"notifications", OperationalAlertViewSet, basename="notifications")
router.register(r"financial-opening-balances", FinancialOpeningBalanceViewSet, basename="financial-opening-balances")
router.register(
    r"account-transactions",
    AccountTransactionViewSet,
    basename="account-transactions",
)
router.register(
    r"account-transfers",
    AccountTransferViewSet,
    basename="account-transfers",
)


# urlpatterns = [path("shop/", include(router.urls))]


urlpatterns = [
    path("shop/", include(router.urls)),
    path("shop/opening-inventory/", OpeningInventoryView.as_view(), name="opening-inventory"),
    path("shop/dashboard-summary/", DashboardSummaryView.as_view(), name="dashboard-summary"),
    path("shop/opening-inventory/template/", OpeningInventoryTemplateView.as_view(), name="opening-inventory-template"),
    path("shop/products/export-all/", export_all_products, name="export-all-products"),
    path(
        "shop/financial-report/", FinancialReportView.as_view(), name="financial-report"
    ),
    path(
        "shop/comprehensive-purchase-report/", ComprehensivePurchaseReportView.as_view(), name="comprehensive-purchase-report"
    ),
    path(
        "shop/comprehensive-sale-report/", comprehensive_sale_report, name="comprehensive-sale-report"
    ),
    path(
        "shop/customer-report/", customer_report, name="customer-report"
    ),
    path(
        "shop/supplier-report/", supplier_report, name="supplier-report"
    ),
    path(
        "shop/cash-flow-report/", CashFlowReportView.as_view(), name="cash-flow-report"
    ),
    path(
        "shop/daily-diary-summary/", DailyDiarySummaryView.as_view(), name="daily-diary-summary"
    ),
    path(
        "shop/daily-diary-report/", DailyDiaryReportView.as_view(), name="daily-diary-report"
    ),
    path("shop/accounting-reports/", AccountingReportView.as_view(), name="accounting-reports"),
    path("shop/aging-report/", AgingReportView.as_view(), name="aging-report"),
    path("shop/warehouse-profit-report/", WarehouseProfitReportView.as_view(), name="warehouse-profit-report"),
    path("shop/sales-performance-report/", SalesPerformanceReportView.as_view(), name="sales-performance-report"),
    path("shop/purchase-analysis-report/", PurchaseAnalysisReportView.as_view(), name="purchase-analysis-report"),
    path("shop/inventory-report/", InventoryReportView.as_view(), name="inventory-report"),
    path("shop/finance-report/", FinanceReportView.as_view(), name="finance-report"),
    path("shop/party-statement-report/", PartyStatementReportView.as_view(), name="party-statement-report"),
]
