import * as entities from './entities';
import { menu } from './menu';
import { theme } from './theme';
import { ActivatePage, ApplicaAdmin, HttpError, RecoverPage, RegisterPage, Resource } from '@/';
import build from '@/playground/build.json';
import { CustomPage, TestWizardForm } from '@/playground/components';
import { API_URL, APP_NAME, PUSH_NOTIFICATIONS_CONFIG } from '@/playground/config';
import { ApplicaDataProvider, createAttachmentsParser } from '@applica-software-guru/crud-client';
import { ApplicaAuthProvider, createAuthProvider } from '@applica-software-guru/iam-client';
import { CustomRoutes } from 'ra-core';
import { Route } from 'react-router-dom';
import { createI18nProvider, createJsonI18nProvider } from '@/i18n';

const authProvider = createAuthProvider({ apiUrl: `${API_URL}/auth` });
const dataProvider = new ApplicaDataProvider({
  apiUrl: API_URL,
  authProvider,
  getHeaders: () => authProvider.getHeaders(),
  getToken: () => authProvider.getToken(),
  attachmentsParser: createAttachmentsParser(),
  HttpErrorClass: HttpError
});
const useJson = false;
const i18nProvider = useJson
  ? createJsonI18nProvider({
      path: '/i18n',
      defaultLocale: 'it',
      locales: [
        { locale: 'it', name: 'Italiano' },
        { locale: 'en', name: 'English' }
      ]
    })
  : createI18nProvider({ apiUrl: API_URL, allowMissing: true, defaultLocale: 'it' });
function App() {
  return (
    <ApplicaAdmin
      theme={theme}
      themeConfig={{
        presetColor: 'theme5',
        themeOrientation: 'horizontal',
        container: true
      }}
      apiUrl={API_URL}
      authProvider={authProvider}
      dataProvider={dataProvider}
      i18nProvider={i18nProvider}
      defaultLocale="it"
      menu={menu}
      name={APP_NAME}
      copy="Test"
      version={build.version}
      enableNotification
      enableRegistration
      enablePasswordRecover
      enableThemeToggler
      oauth={{
        google: { clientId: 'YOUR_CLIENT_ID' }
      }}
      pushNotifications={PUSH_NOTIFICATIONS_CONFIG}
      enableLocaleSwitcher
    >
      <CustomRoutes>
        <Route path="/custom-page" element={<CustomPage />} />
        <Route path="/wizard-form" element={<TestWizardForm />} />
      </CustomRoutes>
      <Resource name="entities/notification" {...entities.notification} />
      <Resource name="entities/user" {...entities.user} />
      <Resource name="entities/i18n-message" {...entities.i18nMessage} />
      <Resource name="entities/device" {...entities.device} />
      <Resource name="entities/category" {...entities.category} />
      <CustomRoutes noLayout>
        <Route path="/register" element={<RegisterPage name={APP_NAME} copy="Test" version={build.version} />} />
        <Route path="/recover" element={<RecoverPage name={APP_NAME} copy="Test" version={build.version} />} />
        <Route path="/activate/:token" element={<ActivatePage name={APP_NAME} copy="Test" version={build.version} />} />
      </CustomRoutes>
    </ApplicaAdmin>
  );
}

export { App };
