import React, { lazy } from 'react';
import intl from 'react-intl-universal';

// const BASE_URL = '/dashboard';

export const getDashboardRoutes = () => [
  // // Accounts.
  {
    path: `/accounts`,
    component: lazy(() => import('containers/Accounts/AccountsChart')),
    breadcrumb: intl.get('accounts_chart'),
    hotkey: 'shift+a',
    pageTitle: intl.get('accounts_chart'),
  },
  // Accounting.
  {
    path: `/make-journal-entry`,
    component: lazy(() =>
      import('containers/Accounting/MakeJournal/MakeJournalEntriesPage'),
    ),
    breadcrumb: intl.get('make_journal_entry'),
    hotkey: 'ctrl+shift+m',
    pageTitle: intl.get('new_journal'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/manual-journals/:id/edit`,
    component: lazy(() =>
      import('containers/Accounting/MakeJournal/MakeJournalEntriesPage'),
    ),
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_journal'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/manual-journals`,
    component: lazy(() =>
      import('containers/Accounting/JournalsLanding/ManualJournalsList'),
    ),
    breadcrumb: intl.get('manual_journals'),
    hotkey: 'shift+m',
    pageTitle: intl.get('manual_journals'),
  },
  {
    path: `/items/categories`,
    component: lazy(() =>
      import('containers/ItemsCategories/ItemCategoriesList'),
    ),
    breadcrumb: intl.get('categories'),
    pageTitle: intl.get('category_list'),
  },
  // Items.
  {
    path: `/items/:id/edit`,
    component: lazy(() => import('containers/Items/ItemFormPage')),
    name: 'item-edit',
    breadcrumb: intl.get('edit_item'),
    pageTitle: intl.get('edit_item'),
    backLink: true,
  },
  {
    path: `/items/new?duplicate=/:id`,
    component: lazy({
      loader: () => import('containers/Items/ItemFormPage'),
    }),
    breadcrumb: intl.get('duplicate_item'),
  },
  {
    path: `/items/new`,
    component: lazy(() => import('containers/Items/ItemFormPage')),
    name: 'item-new',
    breadcrumb: intl.get('new_item'),
    hotkey: 'ctrl+shift+w',
    pageTitle: intl.get('new_item'),
    backLink: true,
  },
  {
    path: `/items`,
    component: lazy(() => import('containers/Items/ItemsList')),
    breadcrumb: intl.get('items'),
    hotkey: 'shift+w',
    pageTitle: intl.get('items_list'),
  },

  // Inventory adjustments.
  {
    path: `/inventory-adjustments`,
    component: lazy(() =>
      import('containers/InventoryAdjustments/InventoryAdjustmentList'),
    ),
    breadcrumb: intl.get('inventory_adjustments'),
    pageTitle: intl.get('inventory_adjustment_list'),
  },

  // Financial Reports.
  {
    path: `/financial-reports/general-ledger`,
    component: lazy(() =>
      import('containers/FinancialStatements/GeneralLedger/GeneralLedger'),
    ),
    breadcrumb: intl.get('general_ledger'),
    hint: intl.get('reports_every_transaction_going_in_and_out_of_your'),
    hotkey: 'shift+4',
    pageTitle: intl.get('general_ledger'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/balance-sheet`,
    component: lazy(() =>
      import('containers/FinancialStatements/BalanceSheet/BalanceSheet'),
    ),
    breadcrumb: intl.get('balance_sheet'),
    hint: intl.get('reports_a_company_s_assets_liabilities_and_shareholders'),
    hotkey: 'shift+1',
    pageTitle: intl.get('balance_sheet'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/trial-balance-sheet`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/TrialBalanceSheet/TrialBalanceSheet'
      ),
    ),
    breadcrumb: intl.get('trial_balance_sheet'),
    hint: intl.get('summarizes_the_credit_and_debit_balance_of_each_account'),
    hotkey: 'shift+5',
    pageTitle: intl.get('trial_balance_sheet'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/profit-loss-sheet`,
    component: lazy(() =>
      import('containers/FinancialStatements/ProfitLossSheet/ProfitLossSheet'),
    ),
    breadcrumb: intl.get('profit_loss_sheet'),
    hint: intl.get('reports_the_revenues_costs_and_expenses'),
    hotkey: 'shift+2',
    pageTitle: intl.get('profit_loss_sheet'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: '/financial-reports/receivable-aging-summary',
    component: lazy(() =>
      import('containers/FinancialStatements/ARAgingSummary/ARAgingSummary'),
    ),
    breadcrumb: intl.get('receivable_aging_summary'),
    hint: intl.get('summarize_total_unpaid_balances_of_customers_invoices'),
    pageTitle: intl.get('receivable_aging_summary'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: '/financial-reports/payable-aging-summary',
    component: lazy(() =>
      import('containers/FinancialStatements/APAgingSummary/APAgingSummary'),
    ),
    breadcrumb: intl.get('payable_aging_summary'),
    hint: intl.get('summarize_total_unpaid_balances_of_vendors_purchase'),
    pageTitle: intl.get('payable_aging_summary'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/journal-sheet`,
    component: lazy(() =>
      import('containers/FinancialStatements/Journal/Journal'),
    ),
    breadcrumb: intl.get('journal_sheet'),
    hint: intl.get('the_debit_and_credit_entries_of_system_transactions'),
    hotkey: 'shift+3',
    pageTitle: intl.get('journal_sheet'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/financial-reports/purchases-by-items`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/PurchasesByItems/PurchasesByItems'
      ),
    ),
    breadcrumb: intl.get('purchases_by_items'),
    // hotkey: '',
    pageTitle: intl.get('purchases_by_items'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/sales-by-items`,
    component: lazy(() =>
      import('containers/FinancialStatements/SalesByItems/SalesByItems'),
    ),
    breadcrumb: intl.get('sales_by_items'),
    pageTitle: intl.get('sales_by_items'),
    hint: intl.get(
      'summarize_the_business_s_sold_items_quantity_income_and_average_income_rate',
    ),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/inventory-valuation`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/InventoryValuation/InventoryValuation'
      ),
    ),
    breadcrumb: intl.get('inventory_valuation'),
    hint: intl.get('summerize_your_transactions_for_each_inventory_item'),
    pageTitle: intl.get('inventory_valuation'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/customers-balance-summary`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/CustomersBalanceSummary/CustomersBalanceSummary'
      ),
    ),
    breadcrumb: intl.get('customers_balance_summary'),
    hint: intl.get('summerize_how_much_each_customer_owes_your_business'),
    pageTitle: intl.get('customers_balance_summary'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/vendors-balance-summary`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/VendorsBalanceSummary/VendorsBalanceSummary'
      ),
    ),
    breadcrumb: intl.get('vendors_balance_summary'),
    hint: intl.get('summerize_the_total_amount_your_business_owes_each_vendor'),
    pageTitle: intl.get('vendors_balance_summary'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/transactions-by-customers`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/CustomersTransactions/CustomersTransactions'
      ),
    ),
    breadcrumb: intl.get('customers_transactions'),
    hint: intl.get('reports_every_transaction_going_in_and_out_of_each_customer'),
    pageTitle: intl.get('customers_transactions'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/transactions-by-vendors`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/VendorsTransactions/VendorsTransactions'
      ),
    ),
    breadcrumb: intl.get('vendors_transactions'),
    hint: intl.get('reports_every_transaction_going_in_and_out_of_each_vendor_supplier'),
    pageTitle: intl.get('vendors_transactions'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/cash-flow`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/CashFlowStatement/CashFlowStatement'
      ),
    ),
    breadcrumb: intl.get('cash_flow_statement'),
    hint: intl.get('reports_inflow_and_outflow_of_cash_and_cash_equivalents'),
    pageTitle: intl.get('cash_flow_statement'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/financial-reports/inventory-item-details`,
    component: lazy(() =>
      import(
        'containers/FinancialStatements/InventoryItemDetails/InventoryItemDetails'
      ),
    ),
    breadcrumb: intl.get('inventory_item_details'),
    hint: intl.get('reports_every_transaction_going_in_and_out_of_your_items'),
    pageTitle: intl.get('inventory_item_details'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: '/financial-reports',
    component: lazy(() =>
      import('containers/FinancialStatements/FinancialReports'),
    ),
    breadcrumb: intl.get('financial_reports'),
    pageTitle: intl.get('all_financial_reports'),
  },
  // Exchange Rates
  {
    path: `/exchange-rates`,
    component: lazy(() => import('containers/ExchangeRates/ExchangeRatesList')),
    breadcrumb: intl.get('exchange_rates_list'),
    pageTitle: intl.get('exchange_rates_list'),
  },
  // Expenses.
  {
    path: `/expenses/new`,
    component: lazy(() =>
      import('containers/Expenses/ExpenseForm/ExpenseFormPage'),
    ),
    breadcrumb: intl.get('expenses'),
    hotkey: 'ctrl+shift+x',
    pageTitle: intl.get('new_expense'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/expenses/:id/edit`,
    component: lazy(() =>
      import('containers/Expenses/ExpenseForm/ExpenseFormPage'),
    ),
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_expense'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/expenses`,
    component: lazy(() =>
      import('containers/Expenses/ExpensesLanding/ExpensesList'),
    ),
    breadcrumb: intl.get('expenses_list'),
    pageTitle: intl.get('expenses_list'),
    hotkey: 'shift+x',
  },

  // Customers
  {
    path: `/customers/:id/edit`,
    component: lazy(() =>
      import('containers/Customers/CustomerForm/CustomerFormPage'),
    ),
    name: 'customer-edit',
    breadcrumb: intl.get('edit_customer'),
    pageTitle: intl.get('edit_customer'),
    backLink: true,
  },
  {
    path: `/customers/new`,
    component: lazy(() =>
      import('containers/Customers/CustomerForm/CustomerFormPage'),
    ),
    name: 'customer-new',
    breadcrumb: intl.get('new_customer'),
    hotkey: 'ctrl+shift+c',
    pageTitle: intl.get('new_customer'),
    backLink: true,
  },
  {
    path: `/customers`,
    component: lazy(() =>
      import('containers/Customers/CustomersLanding/CustomersList'),
    ),
    breadcrumb: intl.get('customers'),
    hotkey: 'shift+c',
    pageTitle: intl.get('customers_list'),
  },
  {
    path: `/customers/contact_duplicate=/:id`,
    component: lazy(() =>
      import('containers/Customers/CustomerForm/CustomerFormPage'),
    ),
    name: 'duplicate-customer',
    breadcrumb: intl.get('duplicate_customer'),
    pageTitle: intl.get('new_customer'),
    backLink: true,
  },

  // Vendors
  {
    path: `/vendors/:id/edit`,
    component: lazy(() =>
      import('containers/Vendors/VendorForm/VendorFormPage'),
    ),
    name: 'vendor-edit',
    breadcrumb: intl.get('edit_vendor'),
    pageTitle: intl.get('edit_vendor'),
    backLink: true,
  },
  {
    path: `/vendors/new`,
    component: lazy(() =>
      import('containers/Vendors/VendorForm/VendorFormPage'),
    ),
    name: 'vendor-new',
    breadcrumb: intl.get('new_vendor'),
    hotkey: 'ctrl+shift+v',
    pageTitle: intl.get('new_vendor'),
    backLink: true,
  },
  {
    path: `/vendors`,
    component: lazy(() =>
      import('containers/Vendors/VendorsLanding/VendorsList'),
    ),
    breadcrumb: intl.get('vendors'),
    hotkey: 'shift+v',
    pageTitle: intl.get('vendors_list'),
  },
  {
    path: `/vendors/contact_duplicate=/:id`,
    component: lazy(() =>
      import('containers/Vendors/VendorForm/VendorFormPage'),
    ),
    name: 'duplicate-vendor',
    breadcrumb: intl.get('duplicate_vendor'),
    pageTitle: intl.get('new_vendor'),
    backLink: true,
  },

  // Estimates
  {
    path: `/estimates/:id/edit`,
    component: lazy(() =>
      import('containers/Sales/Estimates/EstimateForm/EstimateFormPage'),
    ),
    name: 'estimate-edit',
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_estimate'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/invoices/new?from_estimate_id=/:id`,
    component: lazy(() =>
      import('containers/Sales/Estimates/EstimateForm/EstimateFormPage'),
    ),
    name: 'convert-to-invoice',
    breadcrumb: intl.get('new_estimate'),
    pageTitle: intl.get('new_estimate'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/estimates/new`,
    component: lazy(() =>
      import('containers/Sales/Estimates/EstimateForm/EstimateFormPage'),
    ),
    name: 'estimate-new',
    breadcrumb: intl.get('new_estimate'),
    hotkey: 'ctrl+shift+e',
    pageTitle: intl.get('new_estimate'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/estimates`,
    component: lazy(() =>
      import('containers/Sales/Estimates/EstimatesLanding/EstimatesList'),
    ),
    name: 'estimates-list',
    breadcrumb: intl.get('estimates_list'),
    hotkey: 'shift+e',
    pageTitle: intl.get('estimates_list'),
  },

  // Invoices.
  {
    path: `/invoices/:id/edit`,
    component: lazy(() =>
      import('containers/Sales/Invoices/InvoiceForm/InvoiceFormPage'),
    ),
    name: 'invoice-edit',
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_invoice'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/invoices/new`,
    component: lazy(() =>
      import('containers/Sales/Invoices/InvoiceForm/InvoiceFormPage'),
    ),
    name: 'invoice-new',
    breadcrumb: intl.get('new_invoice'),
    hotkey: 'ctrl+shift+i',
    pageTitle: intl.get('new_invoice'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/invoices`,
    component: lazy(() =>
      import('containers/Sales/Invoices/InvoicesLanding/InvoicesList'),
    ),
    breadcrumb: intl.get('invoices_list'),
    hotkey: 'shift+i',
    pageTitle: intl.get('invoices_list'),
  },

  // Sales Receipts.
  {
    path: `/receipts/:id/edit`,
    component: lazy(() =>
      import('containers/Sales/Receipts/ReceiptForm/ReceiptFormPage'),
    ),
    name: 'receipt-edit',
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_receipt'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/receipts/new`,
    component: lazy(() =>
      import('containers/Sales/Receipts/ReceiptForm/ReceiptFormPage'),
    ),
    name: 'receipt-new',
    breadcrumb: intl.get('new_receipt'),
    hotkey: 'ctrl+shift+r',
    pageTitle: intl.get('new_receipt'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/receipts`,
    component: lazy(() =>
      import('containers/Sales/Receipts/ReceiptsLanding/ReceiptsList'),
    ),
    breadcrumb: intl.get('receipts_list'),
    hotkey: 'shift+r',
    pageTitle: intl.get('receipts_list'),
  },

  // Payment receives
  {
    path: `/payment-receives/:id/edit`,
    component: lazy(() =>
      import(
        'containers/Sales/PaymentReceives/PaymentReceiveForm/PaymentReceiveFormPage'
      ),
    ),
    name: 'payment-receive-edit',
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_payment_receive'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/payment-receives/new`,
    component: lazy(() =>
      import(
        'containers/Sales/PaymentReceives/PaymentReceiveForm/PaymentReceiveFormPage'
      ),
    ),
    name: 'payment-receive-new',
    breadcrumb: intl.get('new_payment_receive'),
    pageTitle: intl.get('new_payment_receive'),
    backLink: true,
    sidebarExpand: false,
  },
  {
    path: `/payment-receives`,
    component: lazy(() =>
      import(
        'containers/Sales/PaymentReceives/PaymentsLanding/PaymentReceivesList'
      ),
    ),
    breadcrumb: intl.get('payment_receives_list'),
    pageTitle: intl.get('payment_receives_list'),
  },

  // Bills
  {
    path: `/bills/:id/edit`,
    component: lazy(() =>
      import('containers/Purchases/Bills/BillForm/BillFormPage'),
    ),
    name: 'bill-edit',
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_bill'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/bills/new`,
    component: lazy(() =>
      import('containers/Purchases/Bills/BillForm/BillFormPage'),
    ),
    name: 'bill-new',
    breadcrumb: intl.get('new_bill'),
    hotkey: 'ctrl+shift+b',
    pageTitle: intl.get('new_bill'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/bills`,
    component: lazy(() =>
      import('containers/Purchases/Bills/BillsLanding/BillsList'),
    ),
    breadcrumb: intl.get('bills_list'),
    hotkey: 'shift+b',
    pageTitle: intl.get('bills_list'),
  },

  // Subscription billing.
  {
    path: `/billing`,
    component: lazy(() => import('containers/Subscriptions/BillingForm')),
    breadcrumb: intl.get('new_billing'),
  },
  // Payment modes.
  {
    path: `/payment-mades/:id/edit`,
    component: lazy(() =>
      import(
        'containers/Purchases/PaymentMades/PaymentForm/PaymentMadeFormPage'
      ),
    ),
    name: 'payment-made-edit',
    breadcrumb: intl.get('edit'),
    pageTitle: intl.get('edit_payment_made'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/payment-mades/new`,
    component: lazy(() =>
      import(
        'containers/Purchases/PaymentMades/PaymentForm/PaymentMadeFormPage'
      ),
    ),
    name: 'payment-made-new',
    breadcrumb: intl.get('new_payment_made'),
    pageTitle: intl.get('new_payment_made'),
    sidebarExpand: false,
    backLink: true,
  },
  {
    path: `/payment-mades`,
    component: lazy(() =>
      import(
        'containers/Purchases/PaymentMades/PaymentsLanding/PaymentMadeList'
      ),
    ),
    breadcrumb: intl.get('payment_made_list'),
    pageTitle: intl.get('payment_made_list'),
  },
  // Homepage
  {
    path: `/`,
    component: lazy(() => import('containers/Homepage/Homepage')),
    breadcrumb: intl.get('homepage'),
  },
];
