import { lazy } from 'react';
import RoleManagement from '../pages/Role/RoleManagment';
import AddRoleForm from '../pages/Role/AddRoles';
import EditRolse from '../pages/Role/EditRoles';
import ViewRoles from '../pages/Role/ViewRolse';
import UserManagement from '../pages/RoleUsers/Users';
import AddUsers from '../pages/RoleUsers/AddUsers';
import EditUser from '../pages/RoleUsers/EditUser';
import ViewUser from '../pages/RoleUsers/ViewUser';
import InsuranceManagement from '../pages/InsuranceManagement/InsuranceManagement';
import AddInsuranceCompany from '../pages/InsuranceManagement/AddInsurance';
import EditInsuranceCompany from '../pages/InsuranceManagement/EditInsuranceCompany';
import ViewInsurance from '../pages/InsuranceManagement/ViewInsurance';
import InvoiceManagement from '../pages/InvoicesManagement/InvoiceManagement';
import InvoicePreview from '../pages/InvoicesManagement/InvoicePreview';
import CustomerHistory from '../pages/Customers/CustomerHistory';
import BookingForm from '../pages/Customers/AddBookings';
import ApiKeyManagement from '../pages/Settings/APIKEYS';
import PackageManagement from '../pages/Packages/Packages';
import Reports from '../pages/Reports/Reports';
import MainPackagestable from '../pages/Packages/MainPackagestable';
import HeadingManagement from '../pages/Packages/HeadingManagment';
import ViewInsuranceCustomer from '../pages/InsuranceManagement/ViewInsuranceCustomer';
import SettingsLayout from '../pages/Settings/SettingsLayout';
import AICallingAgent from '../pages/Settings/AICallingAgent';
import ProtectedRoute from './ProtectedRoute';
import PublicRoute from './PublicRoute';

const Index = lazy(() => import('../pages/Index'));
const Analytics = lazy(() => import('../pages/Analytics'));
const Finance = lazy(() => import('../pages/Finance'));
const Crypto = lazy(() => import('../pages/Crypto'));
const Todolist = lazy(() => import('../pages/Apps/Todolist'));
const Mailbox = lazy(() => import('../pages/Apps/Mailbox'));
const Notes = lazy(() => import('../pages/Apps/Notes'));
const Contacts = lazy(() => import('../pages/Apps/Contacts'));
const Chat = lazy(() => import('../pages/Apps/Chat'));
const Scrumboard = lazy(() => import('../pages/Apps/Scrumboard'));
const Calendar = lazy(() => import('../pages/Apps/Calendar'));
const List = lazy(() => import('../pages/Apps/Invoice/List'));
const Preview = lazy(() => import('../pages/Apps/Invoice/Preview'));
const Add = lazy(() => import('../pages/Apps/Invoice/Add'));
const Edit = lazy(() => import('../pages/Apps/Invoice/Edit'));
const Tabs = lazy(() => import('../pages/Components/Tabs'));
const Accordians = lazy(() => import('../pages/Components/Accordians'));
const Modals = lazy(() => import('../pages/Components/Modals'));
const Cards = lazy(() => import('../pages/Components/Cards'));
const Carousel = lazy(() => import('../pages/Components/Carousel'));
const Countdown = lazy(() => import('../pages/Components/Countdown'));
const Counter = lazy(() => import('../pages/Components/Counter'));
const SweetAlert = lazy(() => import('../pages/Components/SweetAlert'));
const Timeline = lazy(() => import('../pages/Components/Timeline'));
const Notification = lazy(() => import('../pages/Components/Notification'));
const MediaObject = lazy(() => import('../pages/Components/MediaObject'));
const ListGroup = lazy(() => import('../pages/Components/ListGroup'));
const PricingTable = lazy(() => import('../pages/Components/PricingTable'));
const LightBox = lazy(() => import('../pages/Components/LightBox'));
const Alerts = lazy(() => import('../pages/Elements/Alerts'));
const Avatar = lazy(() => import('../pages/Elements/Avatar'));
const Badges = lazy(() => import('../pages/Elements/Badges'));
const Breadcrumbs = lazy(() => import('../pages/Elements/Breadcrumbs'));
const Buttons = lazy(() => import('../pages/Elements/Buttons'));
const Buttongroups = lazy(() => import('../pages/Elements/Buttongroups'));
const Colorlibrary = lazy(() => import('../pages/Elements/Colorlibrary'));
const DropdownPage = lazy(() => import('../pages/Elements/DropdownPage'));
const Infobox = lazy(() => import('../pages/Elements/Infobox'));
const Jumbotron = lazy(() => import('../pages/Elements/Jumbotron'));
const Loader = lazy(() => import('../pages/Elements/Loader'));
const Pagination = lazy(() => import('../pages/Elements/Pagination'));
const Popovers = lazy(() => import('../pages/Elements/Popovers'));
const Progressbar = lazy(() => import('../pages/Elements/Progressbar'));
const Search = lazy(() => import('../pages/Elements/Search'));
const Tooltip = lazy(() => import('../pages/Elements/Tooltip'));
const Treeview = lazy(() => import('../pages/Elements/Treeview'));
const Typography = lazy(() => import('../pages/Elements/Typography'));
const Widgets = lazy(() => import('../pages/Widgets'));
const FontIcons = lazy(() => import('../pages/FontIcons'));
const DragAndDrop = lazy(() => import('../pages/DragAndDrop'));
const Tables = lazy(() => import('../pages/Tables'));
const Basic = lazy(() => import('../pages/DataTables/Basic'));
const Advanced = lazy(() => import('../pages/DataTables/Advanced'));
const Skin = lazy(() => import('../pages/DataTables/Skin'));
const OrderSorting = lazy(() => import('../pages/DataTables/OrderSorting'));
const MultiColumn = lazy(() => import('../pages/DataTables/MultiColumn'));
const MultipleTables = lazy(() => import('../pages/DataTables/MultipleTables'));
const AltPagination = lazy(() => import('../pages/DataTables/AltPagination'));
const Checkbox = lazy(() => import('../pages/DataTables/Checkbox'));
const RangeSearch = lazy(() => import('../pages/DataTables/RangeSearch'));
const Export = lazy(() => import('../pages/DataTables/Export'));
const ColumnChooser = lazy(() => import('../pages/DataTables/ColumnChooser'));
const Profile = lazy(() => import('../pages/Users/Profile'));
const AccountSetting = lazy(() => import('../pages/Users/AccountSetting'));
const KnowledgeBase = lazy(() => import('../pages/Pages/KnowledgeBase'));
const ContactUsBoxed = lazy(() => import('../pages/Pages/ContactUsBoxed'));
const ContactUsCover = lazy(() => import('../pages/Pages/ContactUsCover'));
const Faq = lazy(() => import('../pages/Pages/Faq'));
const ComingSoonBoxed = lazy(() => import('../pages/Pages/ComingSoonBoxed'));
const ComingSoonCover = lazy(() => import('../pages/Pages/ComingSoonCover'));
const ERROR404 = lazy(() => import('../pages/Pages/Error404'));
const ERROR500 = lazy(() => import('../pages/Pages/Error500'));
const ERROR503 = lazy(() => import('../pages/Pages/Error503'));
const Maintenence = lazy(() => import('../pages/Pages/Maintenence'));
const LoginBoxed = lazy(() => import('../pages/Authentication/LoginBoxed'));
const RegisterBoxed = lazy(() => import('../pages/Authentication/RegisterBoxed'));
const UnlockBoxed = lazy(() => import('../pages/Authentication/UnlockBox'));
const RecoverIdBoxed = lazy(() => import('../pages/Authentication/RecoverIdBox'));
const LoginCover = lazy(() => import('../pages/Authentication/LoginCover'));
const RegisterCover = lazy(() => import('../pages/Authentication/RegisterCover'));
const RecoverIdCover = lazy(() => import('../pages/Authentication/RecoverIdCover'));
const UnlockCover = lazy(() => import('../pages/Authentication/UnlockCover'));
const About = lazy(() => import('../pages/About'));
const Error = lazy(() => import('../components/Error'));
const Charts = lazy(() => import('../pages/Charts'));
const FormBasic = lazy(() => import('../pages/Forms/Basic'));
const FormInputGroup = lazy(() => import('../pages/Forms/InputGroup'));
const FormLayouts = lazy(() => import('../pages/Forms/Layouts'));
const Validation = lazy(() => import('../pages/Forms/Validation'));
const InputMask = lazy(() => import('../pages/Forms/InputMask'));
const Select2 = lazy(() => import('../pages/Forms/Select2'));
const Touchspin = lazy(() => import('../pages/Forms/TouchSpin'));
const CheckBoxRadio = lazy(() => import('../pages/Forms/CheckboxRadio'));
const Switches = lazy(() => import('../pages/Forms/Switches'));
const Wizards = lazy(() => import('../pages/Forms/Wizards'));
const FileUploadPreview = lazy(() => import('../pages/Forms/FileUploadPreview'));
const QuillEditor = lazy(() => import('../pages/Forms/QuillEditor'));
const MarkDownEditor = lazy(() => import('../pages/Forms/MarkDownEditor'));
const DateRangePicker = lazy(() => import('../pages/Forms/DateRangePicker'));
const Clipboard = lazy(() => import('../pages/Forms/Clipboard'));

//new routes
const Customer = lazy(() => import('../pages/Customers/Customer'));
const AddCustomer = lazy(() => import('../pages/Customers/AddCustomer'));
const UpdateCustomer = lazy(() => import('../pages/Customers/UpdateCustomer'));
const Booking = lazy(() => import('../pages/Customers/Booking'));
const CustomerDetails = lazy(() => import('../pages/Customers/CustomerDetails'));
const PaymentSuccess = lazy(() => import('../components/PaymentSuccess'));
const PaymentCancel = lazy(() => import('../components/PaymentCancel'));

//inquiry routes
const Inquiry = lazy(() => import('../pages/Inquiry/Inquiry'));
const AddInquiry = lazy(() => import('../pages/Inquiry/AddInquiry'));
const ViewInquiry = lazy(() => import('../pages/Inquiry/ViewInquiry'));


const routes = [
    // dashboard
    {
        path: '/',
  element: (
    <PublicRoute>
      <LoginBoxed />
    </PublicRoute>
  ),
        layout: 'blank',
    },

    {
        path: '/dashboard',
        // element: <Index />,
        element: (
            <ProtectedRoute moduleName="Dashboard">
                <Index />
            </ProtectedRoute>
        ),
    },

    {
        path: '/customer',
        element: (
            <ProtectedRoute moduleName="Customer" action="view">
                <Customer />
            </ProtectedRoute>
        ),
    },

    {
        path: '/paymentsuccess',
        element: <PaymentSuccess />,
        layout: 'blank',
    },

    {
        path: '/paymentcancel',
        element: <PaymentCancel />,
        layout: 'blank',
    },

    {
        path: '/customers/addcustomer',
        element: (
            <ProtectedRoute moduleName="Customer" action="add">
                <AddCustomer />
            </ProtectedRoute>
        ),
    },

    {
        path: '/customers/updatecustomer/',
        element: (
            <ProtectedRoute moduleName="Customer" action="edit">
                <UpdateCustomer />
            </ProtectedRoute>
        ),
    },

    {
        path: '/booking',
        element: (
            <ProtectedRoute moduleName="Booking" action="view">
                <Booking />
            </ProtectedRoute>
        ),
    },
    {
        path: '/role',
        element: (
            <ProtectedRoute moduleName="Role" action="view">
                <RoleManagement />
            </ProtectedRoute>
        ),
    },
    {
        path: '/roles/addrole',
        element: (
            <ProtectedRoute moduleName="Role" action="add">
                <AddRoleForm />
            </ProtectedRoute>
        ),
    },
    {
        path: 'roles/updaterole/',
        element: (
            <ProtectedRoute moduleName="Role" action="edit">
                <EditRolse />
            </ProtectedRoute>
        ),
    },
    {
        path: 'roles/roledetails/',
        element: (
            <ProtectedRoute moduleName="Role">
                <ViewRoles />
            </ProtectedRoute>
        ),
    },
    {
        path: 'Users',
        element: (
            <ProtectedRoute moduleName="Users" action="view">
                <UserManagement />
            </ProtectedRoute>
        ),
    },
    {
        path: 'users/adduser',
        element: (
            <ProtectedRoute moduleName="Users" action="add">
                <AddUsers />
            </ProtectedRoute>
        ),
    },
    {
        path: 'users/edituser/:userid',
        element: (
            <ProtectedRoute moduleName="Users" action="edit">
                <EditUser />
            </ProtectedRoute>
        ),
    },
    {
        path: 'users/viewuser/:userid',
        element: (
            <ProtectedRoute moduleName="Users">
                <ViewUser />
            </ProtectedRoute>
        ),
    },
    {
        path: 'insurance',
        element: (
            <ProtectedRoute moduleName="Insurance" action="view">
                <InsuranceManagement />
            </ProtectedRoute>
        ),
    },
    {
        path: 'view/insurance/customer/:id',
        element: (
            <ProtectedRoute moduleName="Insurance"  >
                <ViewInsuranceCustomer />
            </ProtectedRoute>
        ),
    },
    {
        path: 'insurance/add',
        element: (
            <ProtectedRoute moduleName="Insurance" action="add">
                <AddInsuranceCompany />
            </ProtectedRoute>
        ),
    },
    {
        path: 'insurance/update/:id',
        element: (
            <ProtectedRoute moduleName="Insurance" action="edit">
                <EditInsuranceCompany />
            </ProtectedRoute>
        ),
    },
    {
        path: 'insurance/view/:id',
        element: (
            <ProtectedRoute moduleName="Insurance">
                <ViewInsurance />
            </ProtectedRoute>
        ),
    },
    {
        path: 'invoices',
        element: (
            <ProtectedRoute moduleName="Invoice" action="view">
                <InvoiceManagement />
            </ProtectedRoute>
        ),
    },
    {
        path: 'invoices/view/:booking_id',
        element: (
            <ProtectedRoute moduleName="Invoice">
                <InvoicePreview />
            </ProtectedRoute>
        ),
    },
    {
        path: 'packages',
        element: (
            <ProtectedRoute moduleName="Package" action="view">
                <MainPackagestable />
            </ProtectedRoute>
        ),
    },

    {
        path: 'reports',
        element: (
            <ProtectedRoute moduleName="Report" action="view">
                <Reports />
            </ProtectedRoute>
        ),
    },


    {
        path: '/customers/customerdetails/',
        element: (
            <ProtectedRoute moduleName="Customer">
                <CustomerDetails />
            </ProtectedRoute>
        ),
    },
    {
        path: '/customers/history/:customerId',
        element: (
            <ProtectedRoute moduleName="Customer">
                <CustomerHistory />
            </ProtectedRoute>
        ),
    },
    {
        path: '/booking/add',
        element: (
            <ProtectedRoute moduleName="Booking" action="add">
                <BookingForm />
            </ProtectedRoute>
        ),
    },
    {
        path: '/settings/api-keys',
        element: (
            <ProtectedRoute moduleName="Settings" action="view">
                <ApiKeyManagement />
            </ProtectedRoute>
        ),
    },
    {
        path: '/settings',
        element: (
            <ProtectedRoute moduleName="Settings">
                <SettingsLayout />
            </ProtectedRoute>
        ),
        children: [
            {
                path: 'packagemanagement',
                element: <HeadingManagement />,
            },
            {
                path: 'ai-calling-agent',
                element: <AICallingAgent />,
            },
        ],
    },
    //routes for inquiry
    {
        path: '/inquiry',
        element: (
            // <ProtectedRoute moduleName="Inquiry" action="view">
                <Inquiry />
            // </ProtectedRoute>
        ),
    },
    {
        path: 'inquiries/add',
        element: (
            <ProtectedRoute moduleName="Customer" action="add">
                <AddInquiry />
            </ProtectedRoute>
        ),
    },
    {
        path: 'inquiries/view',
        element: (
            <ProtectedRoute moduleName="Customer" action="view">
                <ViewInquiry />
            </ProtectedRoute>
        ),
    },



    // {
    //     path: '/index',
    //     element: <Index />,
    // },
    // analytics page
    {
        path: '/analytics',
        element: <Analytics />,
    },
    // finance page
    {
        path: '/finance',
        element: <Finance />,
    },
    // crypto page
    {
        path: '/crypto',
        element: <Crypto />,
    },
    {
        path: '/apps/todolist',
        element: <Todolist />,
    },
    {
        path: '/apps/notes',
        element: <Notes />,
    },
    {
        path: '/apps/contacts',
        element: <Contacts />,
    },
    {
        path: '/apps/mailbox',
        element: <Mailbox />,
    },
    {
        path: '/apps/invoice/list',
        element: <List />,
    },
    // Apps page
    {
        path: '/apps/chat',
        element: <Chat />,
    },
    {
        path: '/apps/scrumboard',
        element: <Scrumboard />,
    },
    {
        path: '/apps/calendar',
        element: <Calendar />,
    },
    // preview page
    {
        path: '/apps/invoice/preview',
        element: <Preview />,
    },
    {
        path: '/apps/invoice/add',
        element: <Add />,
    },
    {
        path: '/apps/invoice/edit',
        element: <Edit />,
    },
    // components page
    {
        path: '/components/tabs',
        element: <Tabs />,
    },
    {
        path: '/components/accordions',
        element: <Accordians />,
    },
    {
        path: '/components/modals',
        element: <Modals />,
    },
    {
        path: '/components/cards',
        element: <Cards />,
    },
    {
        path: '/components/carousel',
        element: <Carousel />,
    },
    {
        path: '/components/countdown',
        element: <Countdown />,
    },
    {
        path: '/components/counter',
        element: <Counter />,
    },
    {
        path: '/components/sweetalert',
        element: <SweetAlert />,
    },
    {
        path: '/components/timeline',
        element: <Timeline />,
    },
    {
        path: '/components/notifications',
        element: <Notification />,
    },
    {
        path: '/components/media-object',
        element: <MediaObject />,
    },
    {
        path: '/components/list-group',
        element: <ListGroup />,
    },
    {
        path: '/components/pricing-table',
        element: <PricingTable />,
    },
    {
        path: '/components/lightbox',
        element: <LightBox />,
    },
    // elements page
    {
        path: '/elements/alerts',
        element: <Alerts />,
    },
    {
        path: '/elements/avatar',
        element: <Avatar />,
    },
    {
        path: '/elements/badges',
        element: <Badges />,
    },
    {
        path: '/elements/breadcrumbs',
        element: <Breadcrumbs />,
    },
    {
        path: '/elements/buttons',
        element: <Buttons />,
    },
    {
        path: '/elements/buttons-group',
        element: <Buttongroups />,
    },
    {
        path: '/elements/color-library',
        element: <Colorlibrary />,
    },
    {
        path: '/elements/dropdown',
        element: <DropdownPage />,
    },
    {
        path: '/elements/infobox',
        element: <Infobox />,
    },
    {
        path: '/elements/jumbotron',
        element: <Jumbotron />,
    },
    {
        path: '/elements/loader',
        element: <Loader />,
    },
    {
        path: '/elements/pagination',
        element: <Pagination />,
    },
    {
        path: '/elements/popovers',
        element: <Popovers />,
    },
    {
        path: '/elements/progress-bar',
        element: <Progressbar />,
    },
    {
        path: '/elements/search',
        element: <Search />,
    },
    {
        path: '/elements/tooltips',
        element: <Tooltip />,
    },
    {
        path: '/elements/treeview',
        element: <Treeview />,
    },
    {
        path: '/elements/typography',
        element: <Typography />,
    },

    // charts page
    {
        path: '/charts',
        element: <Charts />,
    },
    // widgets page
    {
        path: '/widgets',
        element: <Widgets />,
    },
    //  font-icons page
    {
        path: '/font-icons',
        element: <FontIcons />,
    },
    //  Drag And Drop page
    {
        path: '/dragndrop',
        element: <DragAndDrop />,
    },
    //  Tables page
    {
        path: '/tables',
        element: <Tables />,
    },
    // Data Tables
    {
        path: '/datatables/basic',
        element: <Basic />,
    },
    {
        path: '/datatables/advanced',
        element: <Advanced />,
    },
    {
        path: '/datatables/skin',
        element: <Skin />,
    },
    {
        path: '/datatables/order-sorting',
        element: <OrderSorting />,
    },
    {
        path: '/datatables/multi-column',
        element: <MultiColumn />,
    },
    {
        path: '/datatables/multiple-tables',
        element: <MultipleTables />,
    },
    {
        path: '/datatables/alt-pagination',
        element: <AltPagination />,
    },
    {
        path: '/datatables/checkbox',
        element: <Checkbox />,
    },
    {
        path: '/datatables/range-search',
        element: <RangeSearch />,
    },
    {
        path: '/datatables/export',
        element: <Export />,
    },
    {
        path: '/datatables/column-chooser',
        element: <ColumnChooser />,
    },
    // Users page
    {
        path: '/profile',
        element: <Profile />,
    },
    {
        path: '/users/user-account-settings',
        element: <AccountSetting />,
    },
    // pages
    {
        path: '/pages/knowledge-base',
        element: <KnowledgeBase />,
    },
    {
        path: '/pages/contact-us-boxed',
        element: <ContactUsBoxed />,
        layout: 'blank',
    },
    {
        path: '/pages/contact-us-cover',
        element: <ContactUsCover />,
        layout: 'blank',
    },
    {
        path: '/pages/faq',
        element: <Faq />,
    },
    {
        path: '/pages/coming-soon-boxed',
        element: <ComingSoonBoxed />,
        layout: 'blank',
    },
    {
        path: '/pages/coming-soon-cover',
        element: <ComingSoonCover />,
        layout: 'blank',
    },
    {
        path: '/pages/error404',
        element: <ERROR404 />,
        layout: 'blank',
    },
    {
        path: '/pages/error500',
        element: <ERROR500 />,
        layout: 'blank',
    },
    {
        path: '/pages/error503',
        element: <ERROR503 />,
        layout: 'blank',
    },
    {
        path: '/pages/maintenence',
        element: <Maintenence />,
        layout: 'blank',
    },
    //Authentication
    {
        path: '/login',
         element: (
    <PublicRoute>
      <LoginBoxed />
    </PublicRoute>
  ),
        layout: 'blank',
    },
    {
        path: '/auth/boxed-signup',
        element: <RegisterBoxed />,
        layout: 'blank',
    },
    {
        path: '/auth/boxed-lockscreen',
        element: <UnlockBoxed />,
        layout: 'blank',
    },
    {
        path: '/auth/boxed-password-reset',
        element: <RecoverIdBoxed />,
        layout: 'blank',
    },
    {
        path: '/auth/cover-login',
        element: <LoginCover />,
        layout: 'blank',
    },
    {
        path: '/auth/cover-register',
        element: <RegisterCover />,
        layout: 'blank',
    },
    {
        path: '/auth/cover-lockscreen',
        element: <UnlockCover />,
        layout: 'blank',
    },
    {
        path: '/auth/cover-password-reset',
        element: <RecoverIdCover />,
        layout: 'blank',
    },
    //forms page
    {
        path: '/forms/basic',
        element: <FormBasic />,
    },
    {
        path: '/forms/input-group',
        element: <FormInputGroup />,
    },
    {
        path: '/forms/layouts',
        element: <FormLayouts />,
    },
    {
        path: '/forms/validation',
        element: <Validation />,
    },
    {
        path: '/forms/input-mask',
        element: <InputMask />,
    },
    {
        path: '/forms/select2',
        element: <Select2 />,
    },
    {
        path: '/forms/touchspin',
        element: <Touchspin />,
    },
    {
        path: '/forms/checkbox-radio',
        element: <CheckBoxRadio />,
    },
    {
        path: '/forms/switches',
        element: <Switches />,
    },
    {
        path: '/forms/wizards',
        element: <Wizards />,
    },
    {
        path: '/forms/file-upload',
        element: <FileUploadPreview />,
    },
    {
        path: '/forms/quill-editor',
        element: <QuillEditor />,
    },
    {
        path: '/forms/markdown-editor',
        element: <MarkDownEditor />,
    },
    {
        path: '/forms/date-picker',
        element: <DateRangePicker />,
    },
    {
        path: '/forms/clipboard',
        element: <Clipboard />,
    },
    {
        path: '/about',
        element: <About />,
        layout: 'blank',
    },
    {
        path: '*',
        element: <Error />,
        layout: 'blank',
    },
];

export { routes };
