import React from 'react';
import ReactDOM from 'react-dom/client';
import { ProvideAuth } from './context/auth';
import 'react-toastify/dist/ReactToastify.css';
import './index.css';
import AppRoutes from './AppRoutes';
import { BrowserRouter } from 'react-router';
import { client } from '../../types/gen/client.gen';
import { getToken } from './Utils';
import { toast } from 'react-toastify';

client.setConfig({
  auth: () => getToken(),
  baseUrl: '/api', // openapi-ts si to z nějakého důvodu neumí převzít z api.yml
});

// Interceptor na vyhození toasteru při chybě
client.interceptors.response.use(async response => {
  // TODO opravit - login je zatím výjimka, voláme ho "naprázdno" abychom zjistili, zda nás nepřihlásily trusted headers
  if (!response.ok && !response.url.includes("/login")) {
    const json = await response.json();
    toast.error(json.error, { theme: "colored" });
  }
  return response;
});

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <ProvideAuth>
        <AppRoutes />
      </ProvideAuth>
    </BrowserRouter>
  </React.StrictMode>
);
