/* eslint-disable @typescript-eslint/no-unused-vars */
import type React from 'react';
import { useCallback, useContext, useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { Navigate, Route, Routes, useNavigate } from 'react-router-dom';

import LayoutComponent from '../Components/Layout/LayoutComponent';
import LoadingPage from '../Components/Layout/LoadingPage';
import AcceptInvitePage from '../Pages/AcceptInvitation/AcceptInvitePage';
import BillingPage from '../Pages/Account/Pages/Billing/BillingPage';
import Branding from '../Pages/Account/Pages/Branding/Branding';
import CompanySettings from '../Pages/Account/Pages/CompanySettings/CompanySettings';
import Gdpr from '../Pages/Account/Pages/GDPR/Gdpr';
import ManageUsers from '../Pages/Account/Pages/ManageUsers/ManageUsers';
import PasswordAndLogin from '../Pages/Account/Pages/PasswordAndLogin/PasswordAndLogin';
import TransferAccountToUsers from '../Pages/Account/Pages/PersonalPreferences/pages/TransferAccountToUsers/TransferAccountToUsers';
import PersonalPreferences from '../Pages/Account/Pages/PersonalPreferences/PersonalPreferences';
import BillingDetailsPage from '../Pages/BillingDetails/BillingDetailsPage';
import CashFlowAnalysisPage from '../Pages/CashFlowAnalysis/CashFlowAnalysisPage';
import CashFlowMetric from '../Pages/CashFlowAnalysis/CashFlowMetric/CashFlowMetric';
import CashFlowPerspective from '../Pages/CashFlowAnalysis/CashFlowPerspective/CashFlowPerspective';
import FundingMeters from '../Pages/CashFlowAnalysis/CashFundingMeters/FundingMeters';
import FinancialReturns from '../Pages/CashFlowAnalysis/FinancialReturns/FinancialReturns';
import ChooseCompanyTypePage from '../Pages/ChooseCompanyType/ChooseCompanyTypePage';
import CompaniesPage from '../Pages/Companies/CompaniesPage';
import DashboardPage from '../Pages/Dashboard/Pages/DashboardPage';
import PrintDashboard from '../Pages/Dashboard/PrintDashboard';
import Database from '../Pages/Database/Database';
import FinancialsPage from '../Pages/Financials/FinancialsPage';
import HomeRedirectPage from '../Pages/Home/HomeRedirectPage';
import JoinAddCompanyPage from '../Pages/JoinOrAddCompany/JoinAddCompanyPage';
import LandingPage from '../Pages/LandingPage/LandingPage';
import ManageSubscriptionPage from '../Pages/ManageSubscription/ManageSubscriptionPage';
import MoneyForCeos from '../Pages/MoneyForCeos/MoneyForCeos';
import GeneratePdf from '../Pages/MoneyForCeosBusiness/Components/GeneratePdf';
import MoneyForCeosBusiness from '../Pages/MoneyForCeosBusiness/MoneyForCeosBusiness';
import MoneyForGrowthPage from '../Pages/MoneyForGrowth/MoneyForGrowthPage';
import SignIn from '../Pages/SignIn/SignIn';
import SuccessPaidPage from '../Pages/SuccessPaidPage/SuccessPaidPage';
import Tools from '../Pages/Tools/Tools';
import type { RootState } from '../ReduxState/store';
import FinancialsContextProvider from '../Store/Financials/financials-context';
import {
	joinCompany,
	chooseCompanyType,
	financials,
	personalAccount,
	passwordAndLogin,
	manageUser,
	manageSubscription,
	branding,
	gdpr,
	billingSettings,
	companySettings,
	devices,
	currentPlan,
	companies,
	moneyForCeos,
	moneyForCeosBusiness,
	generatePdf,
	moneyForGrowth,
	tools,
	cashFlowSummary,
	database,
	cashFlowPerspective,
	workingCapitalMetric,
	financialReturns,
	billingDetails,
	cashFundingMeters,
	dashboard,
	acceptInvitation,
	acceptInvitationWithParam,
	landingPage,
	successPaidPage,
	transferAccountToUsers,
	showActiveInvites
} from './RouterComponentHelper';
import EmptyLayoutComponent from '../Components/Layout/EmptyLayoutComponent';
import ShowMyInvites from '../Pages/Account/Pages/PersonalPreferences/pages/ShowMyInvites/ShowMyInvites';
import ScrollToTop from '../Components/ScrollToTop/ScrollToTop';

const RouterComponent: React.FC = (): JSX.Element => {
	const userLoggedIn: boolean = useSelector((state: RootState) => state.login.isLoggedIn);

	return (
		<>
			<ScrollToTop />
			<Routes>
				{!userLoggedIn && (
					<Route element={<EmptyLayoutComponent />}>
						{/* <Route path={'/'} element={<HomeRedirectPage />} /> */}
						{/* <Route path={signup} element={<SignUp/>}/> */}
						<Route element={<SignIn />} path="/" />
						<Route element={<SignIn />} path="/signin" />
						<Route element={<AcceptInvitePage />} path={acceptInvitationWithParam} />
					</Route>
				)}
				{userLoggedIn && (
					<>
						<Route
							element={<PrintDashboard setHtmlForPrint={() => {}} />}
							path="dashboard-print-preview"
						/>
						<Route element={<LayoutComponent />}>
							{/* <Route path={insights} element={<Insights />} /> */}
							<Route path={'/'} element={<Navigate to={'/dashboard'} replace />} />
							<Route element={<HomeRedirectPage />} path="/" />
							<Route element={<DashboardPage />} path={dashboard} />
							<Route element={<BillingPage />} path={billingSettings} />
							<Route element={<BillingDetailsPage />} path={billingDetails} />
							<Route element={<FinancialsPage />} path={financials} />
							<Route element={<CompaniesPage />} path={companies} />
							<Route element={<PersonalPreferences />} path={personalAccount} />
							<Route element={<TransferAccountToUsers />} path={transferAccountToUsers} />
							<Route element={<ShowMyInvites />} path={showActiveInvites} />
							<Route element={<ManageUsers />} path={manageUser} />
							<Route element={<Branding />} path={branding} />
							<Route element={<Gdpr />} path={gdpr} />
							<Route element={<CompanySettings />} path={companySettings} />
							<Route element={<PersonalPreferences />} path={devices} />
							<Route element={<PersonalPreferences />} path={currentPlan} />
							<Route element={<MoneyForCeos />} path={moneyForCeos} />
							<Route element={<MoneyForCeosBusiness />} path={moneyForCeosBusiness} />
							<Route element={<MoneyForGrowthPage />} path={moneyForGrowth} />
							<Route element={<Tools />} path={tools} />
							<Route element={<CashFlowAnalysisPage />} path={cashFlowSummary} />
							<Route element={<CashFlowPerspective />} path={cashFlowPerspective} />
							<Route element={<CashFlowMetric />} path={workingCapitalMetric} />
							<Route element={<FinancialReturns />} path={financialReturns} />
							<Route element={<FundingMeters />} path={cashFundingMeters} />
							<Route element={<Database />} path={database} />
						</Route>
						<Route element={<EmptyLayoutComponent />}>
							<Route element={<JoinAddCompanyPage />} path={joinCompany} />
							<Route
								element={
									<FinancialsContextProvider>
										<LandingPage />
									</FinancialsContextProvider>
								}
								path={landingPage}
							/>
							<Route element={<SuccessPaidPage />} path={successPaidPage} />
							<Route element={<ChooseCompanyTypePage />} path={chooseCompanyType} />
							<Route element={<ManageSubscriptionPage />} path={manageSubscription} />
							<Route element={<PasswordAndLogin />} path={passwordAndLogin} />
							<Route element={<GeneratePdf />} path={generatePdf} />
							<Route element={<AcceptInvitePage />} path={acceptInvitation} />
						</Route>
					</>
				)}
				<Route element={<LoadingPage />} path="/:error" />
				<Route element={<LoadingPage />} path="*" />
			</Routes>
		</>
	);
};

export default RouterComponent;
