import React, { FC } from "react";
import { Routes, Route } from "react-router-dom";
import Login from "../components/SingIn/Login";
import {
  AutoAuth,
  IsSuperAdmin,
  PaymentFlow,
  RequireAuth,
  SuperAdmin,
} from "./authHelper";
import { Settings } from "../components/Settings";
import Section from "../components/Section/Section";
import Projects from "../components/Home/Projects";
import ProjectDetails from "../components/ProjectDetails/ProjectDetails";
import { ServerError } from "../components/Errors";
import { Organization } from "../Pages/Organization";
import { ResetPassword } from "../components/SingIn/ResetPassword";
import { PaymentSuccess } from "../components/Payments/PaymentSuccess";
import { PaymentError } from "../components/Payments/PaymentError";
import { DemoManagment } from "../Pages/DemoManagment/DemoManagment";
import { Administration } from "../Pages/Administration";

const AppRouter: FC = () => {
  return (
      <Routes>
        <Route path="/resetpassword" element={<ResetPassword />} />
        <Route
          path="/login/:pageMode?/:code?"
          element={
            <AutoAuth>
              <Login />
            </AutoAuth>
          }
        />

        <Route
          path="/projects"
          element={
            <RequireAuth>
              <Projects />
            </RequireAuth>
          }
        />
        <Route
          path="/project/:projectID"
          element={
            <RequireAuth>
              <ProjectDetails />
            </RequireAuth>
          }
        />
        <Route
          path="/project/:projectID/:sectionID"
          element={
            <RequireAuth>
              <Section />
            </RequireAuth>
          }
        />
        <Route
          path="/project/:projectID/:sectionID/:pageID"
          element={
            <RequireAuth>
              <Section />
            </RequireAuth>
          }
        />
        <Route
          path="/settings"
          element={
            <RequireAuth>
              <Settings />
            </RequireAuth>
          }
        />
        <Route
          path="/organization/:tab?/:action?"
          element={
            <RequireAuth>
              <Organization />
            </RequireAuth>
          }
        />
        <Route
          path="/payment-error"
          element={
            <PaymentFlow>
              <PaymentError />
            </PaymentFlow>
          }
        />
        <Route
          path="/payment-success"
          element={
            <PaymentFlow>
              <PaymentSuccess />
            </PaymentFlow>
          }
        />
        <Route
          path="/server-error"
          element={
            <RequireAuth>
              <ServerError />
            </RequireAuth>
          }
        />
        <Route
          path="/demoManagment"
          element={
            <IsSuperAdmin>
              <DemoManagment />
            </IsSuperAdmin>
          }
        />
        <Route
          path="/administration/:tab?"
          element={
            <IsSuperAdmin>
              <Administration />
            </IsSuperAdmin>
          }
        />
        <Route
          path="/"
          element={
            <RequireAuth>
              <Projects />
            </RequireAuth>
          }
        />
      </Routes>
  );
};

export default AppRouter;
