import React from 'react';
import type { MenuProps } from 'antd';
import { Link } from 'react-router-dom';
import {
  DashboardOutlined,
  DatabaseOutlined,
  ShoppingOutlined,
  UserOutlined,
  EnvironmentOutlined,
  GlobalOutlined,
  TeamOutlined,
  CustomerServiceOutlined,
  SettingOutlined,
  ShoppingCartOutlined,
  BankOutlined,
  ShopOutlined,
  WalletOutlined,
  RiseOutlined,
  CreditCardOutlined,
  FallOutlined,
  // AreaChartOutlined,
  // ReloadOutlined,
  FileTextOutlined,
  BookOutlined,
  QrcodeOutlined,
  RetweetOutlined,
  DeploymentUnitOutlined,
  InboxOutlined,
  ThunderboltOutlined,
  CalendarOutlined,
  IdcardOutlined,
  HistoryOutlined,
  DollarCircleOutlined,
  StockOutlined,
  SwapOutlined,
  DollarOutlined,
  CreditCardFilled,
  AlertOutlined,
} from '@ant-design/icons';

type MenuItem = Required<MenuProps>['items'][number];

function getItem(
  label: React.ReactNode,
  key: string | null,
  icon?: React.ReactNode,
  children?: MenuItem[],
  type?: 'group'
): MenuItem {
  const isLink = !children && key && key.startsWith('/');
  return {
    key,
    icon,
    children,
    label: isLink ? React.createElement(Link, { to: key, className: "block w-full" }, label) : label,
    title: typeof label === 'string' ? label : undefined,
    type,
  } as MenuItem;
}

export const sidebarMenuItems: MenuItem[] = [
  getItem('Dashboard', '/dashboard', React.createElement(DashboardOutlined)),

  getItem('Masters', 'masters', React.createElement(DatabaseOutlined), [
    getItem('Vegetables', '/masters/vegetable-items', React.createElement(ShoppingOutlined)),
    getItem('State', '/masters/state', React.createElement(GlobalOutlined)),
    getItem('District', '/masters/district', React.createElement(EnvironmentOutlined)),
    getItem('Supplier', '/masters/supplier', React.createElement(UserOutlined)),
    getItem('Customer', '/masters/customer', React.createElement(CustomerServiceOutlined)),
    getItem('Employees', '/masters/employees', React.createElement(IdcardOutlined)),
    getItem('Staff', '/masters/staff', React.createElement(TeamOutlined)),
    getItem('Settings', 'settings', React.createElement(SettingOutlined), [
      getItem('UPI', '/masters/settings/upi', React.createElement(CreditCardOutlined)),
      getItem('Shop', '/masters/settings/shop', React.createElement(ShopOutlined)),
    ]),
  ]),

  // Arrivals
  getItem('Arrivals Addition', 'arrivals', React.createElement(InboxOutlined), [
    getItem('Arrival Lot History', '/arrivals/lot-history', React.createElement(HistoryOutlined)),
    getItem('Patti Settlements', '/arrivals/settlements', React.createElement(DollarCircleOutlined)),
  ]),
  getItem('All Sales', '/sales/all-sales', React.createElement(ShoppingCartOutlined)),

  // Purchase Orders
  getItem('Purchase', 'purchase', React.createElement(ShopOutlined), [
    getItem('Purchase Orders', '/purchase', React.createElement(ShoppingCartOutlined)),
    getItem('Stocks', '/purchase/stocks', React.createElement(StockOutlined)),
    getItem('Cash Purchases', '/purchase/cash-purchases', React.createElement(ThunderboltOutlined)),
    getItem('Supplier Payments', '/purchase/supplier-payments', React.createElement(BankOutlined)),
    getItem('Supplier Returns', '/purchase/supplier-returns', React.createElement(RetweetOutlined)),
    getItem('Box Returns', '/purchase/box-returns', React.createElement(InboxOutlined)),
  ]),

  //Whole Sales
  getItem('Credit Bills', 'sales', React.createElement(WalletOutlined), [
    getItem('Credit Bill', '/sales/sales-orders', React.createElement(RiseOutlined)),
    getItem('Cash Bill', '/sales/quick-sales', React.createElement(ThunderboltOutlined)),
    getItem('Customer Payments', '/sales/customer-payments', React.createElement(BankOutlined)),
  ]),

  getItem("Fast Billing", "/fast-billing", React.createElement(ThunderboltOutlined)),

  //Retail
  getItem('Retail', 'retail', React.createElement(WalletOutlined), [
    getItem('Stock Allocation', '/retail/stock-allocation', React.createElement(DeploymentUnitOutlined)),
    getItem('Retail Stock', '/retail/retail-stock', React.createElement(InboxOutlined)),
    getItem('Retail Sales', '/retail/retail-sales', React.createElement(ShoppingCartOutlined)),
  ]),


  //Quotations
  getItem('Quotations', '/quotations', React.createElement(QrcodeOutlined)),
  //Expenses
  getItem('Expenses', '/expenses', React.createElement(FallOutlined)),
  //Cash & Bank
  getItem('Cash & Bank', 'cash-bank-group', React.createElement(BankOutlined), [
    getItem('Cash & Bank Book', '/cash-bank', React.createElement(BookOutlined)),
    getItem('Move Cash to Bank', '/cash-bank/transfer', React.createElement(SwapOutlined)),
  ]),
  //Attendance
  getItem('Attendance', '/attendance', React.createElement(CalendarOutlined)),
  //Reports
  getItem('Reports', 'reports', React.createElement(FileTextOutlined), [
    getItem('Final Daily Report', '/reports/final-daily-report', React.createElement(CreditCardFilled)),
    getItem('Financial', '/reports/daily-summary/financial', React.createElement(CreditCardFilled)),
    getItem('Outstanding', '/reports/outstanding', React.createElement(AlertOutlined)),
    getItem('Cash Report', '/reports/daily-summary/cash', React.createElement(DollarOutlined)),
    getItem('Bank Report', '/reports/daily-summary/bank', React.createElement(BankOutlined)),
    getItem('Daily Summary', 'reports/daily-summary', React.createElement(CalendarOutlined), [
      getItem('Credit Bills', '/reports/daily-summary/wholesale', React.createElement(RiseOutlined)),
      getItem('Retail', '/reports/daily-summary/retail', React.createElement(WalletOutlined)),
    ]),
    // getItem('Final Stock Report', '/reports/stock-report', React.createElement(AreaChartOutlined)),
    getItem('Lotwise Stock', '/reports/lotwise-stock-report', React.createElement(InboxOutlined)),
    getItem('Sales', 'reports/sales', React.createElement(RiseOutlined), [
      getItem('Credit Bill', 'reports/sales/wholesale', React.createElement(RiseOutlined), [
        getItem('Customer', '/reports/sales/wholesale/customer-wise', React.createElement(CustomerServiceOutlined)),
        getItem('Vegetables', '/reports/sales/wholesale/vegetable-wise', React.createElement(ShoppingOutlined)),
        getItem('Lot-wise', '/reports/sales/wholesale/lot-wise', React.createElement(InboxOutlined)),
      ]),
      getItem('Retail Sales', 'reports/sales/retail-report', React.createElement(RiseOutlined)),
    ]),

    getItem('Ledgers', 'ledgers', React.createElement(BookOutlined), [
      getItem('Customers', '/reports/customer-ledger', React.createElement(BookOutlined)),
      getItem('Suppliers', '/reports/supplier-ledger', React.createElement(BookOutlined)),
      getItem('Walk-Ins', '/reports/walk-in-ledger', React.createElement(BookOutlined)),
      getItem('Patti Settlements', '/reports/patti-ledger', React.createElement(BookOutlined)),
    ]),
  ])

  // Add more menu items as needed
  // getItem('Reports', 'reports', React.createElement(FileOutlined), [
  //   getItem('Sales Report', '/reports/sales'),
  //   getItem('Inventory Report', '/reports/inventory'),
  // ]),
];

export default sidebarMenuItems;
