import { type ReactNode, useEffect } from "react";
import { useTranslation } from "react-i18next";
import { TooltipProvider } from "@/components/ui/tooltip";
import { GoogleAnalytics } from "@/components/GoogleAnalytics";
import { MetriaAnalytics } from "@/components/MetriaAnalytics";
import { ScriptInjector } from "@/components/ScriptInjector";
import { AppDbProvider } from "@/db";
import { Router } from "./router";
import { customerClient } from "./modules/api";

const App = ({ children }: { children?: ReactNode }) => {
  const {
    i18n: { language },
  } = useTranslation();

  // Keep <html lang> in sync with the active language. CSS text-transform
  // takes casing rules from it (e.g. Turkish "i" uppercases to dotted capital I).
  useEffect(() => {
    document.documentElement.lang = language;
    customerClient.setLanguage(language);
  }, [language]);

  return (
    <AppDbProvider>
      <TooltipProvider>
        <GoogleAnalytics />
        <MetriaAnalytics />
        <ScriptInjector />
        {children ?? <Router />}
      </TooltipProvider>
    </AppDbProvider>
  );
};

export default App;
