import { jsxDEV } from "react/jsx-dev-runtime";
import { Environment, EnvironmentContext, EnvironmentExtensionProvider } from "@contember/binding";
import { ContemberClient } from "@contember/react-client";
import { StyleProvider, ToasterProvider, DialogProvider, SectionTabsProvider, Toaster } from "@contember/ui";
import { OutdatedApplicationChecker } from "./Application/OutdatedApplicationChecker.js";
import { ApplicationDevBar } from "./Dev/DevBar.js";
import { I18nProvider } from "../i18n/I18nProvider.js";
import { RoutingContext } from "../routing/RoutingContext.js";
import { RequestProvider } from "../routing/RequestContext.js";
import { NavigationProvider } from "./NavigationProvider/NavigationProvider.js";
import { IdentityProvider } from "./Identity/IdentityProvider.js";
import { projectEnvironmentExtension } from "./Project/ProjectEnvironmentExtension.js";
const validateProps = (props) => {
  if (typeof props.apiBaseUrl !== "string") {
    throw new Error(`The ENV variables haven't been set. Check your \`.env.development.local\` file.`);
  }
};
const ApplicationEntrypoint = (props) => {
  validateProps(props);
  const projectSlug = props.project === "__PROJECT_SLUG__" ? window.location.pathname.split("/")[1] : props.project;
  const basePath = props.basePath === "./" ? `/${projectSlug}/` : props.basePath ?? "/";
  const routing = {
    basePath,
    routes: props.routes ?? { index: { path: "/" } },
    defaultDimensions: props.defaultDimensions
  };
  const rootEnv = Environment.create().withVariables(props.envVariables).withDimensions(props.defaultDimensions ?? {});
  return /* @__PURE__ */ jsxDEV(StyleProvider, { children: /* @__PURE__ */ jsxDEV(EnvironmentContext.Provider, { value: rootEnv, children: /* @__PURE__ */ jsxDEV(I18nProvider, { localeCode: props.defaultLocale, dictionaries: props.dictionaries, children: /* @__PURE__ */ jsxDEV(RoutingContext.Provider, { value: routing, children: /* @__PURE__ */ jsxDEV(RequestProvider, { children: /* @__PURE__ */ jsxDEV(ToasterProvider, { children: /* @__PURE__ */ jsxDEV(
    ContemberClient,
    {
      apiBaseUrl: props.apiBaseUrl,
      sessionToken: props.sessionToken,
      loginToken: props.loginToken,
      project: projectSlug,
      stage: props.stage,
      children: /* @__PURE__ */ jsxDEV(EnvironmentExtensionProvider, { extension: projectEnvironmentExtension, state: projectSlug ?? null, children: /* @__PURE__ */ jsxDEV(DialogProvider, { children: [
        /* @__PURE__ */ jsxDEV(NavigationProvider, { children: /* @__PURE__ */ jsxDEV(IdentityProvider, { onInvalidIdentity: props.onInvalidIdentity, children: [
          /* @__PURE__ */ jsxDEV(OutdatedApplicationChecker, {}, void 0, false, {
            fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
            lineNumber: 72,
            columnNumber: 14
          }, globalThis),
          /* @__PURE__ */ jsxDEV(SectionTabsProvider, { children: props.children }, void 0, false, {
            fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
            lineNumber: 73,
            columnNumber: 14
          }, globalThis),
          /* @__PURE__ */ jsxDEV(ApplicationDevBar, { panels: props.devBarPanels }, void 0, false, {
            fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
            lineNumber: 76,
            columnNumber: 14
          }, globalThis)
        ] }, void 0, true, {
          fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
          lineNumber: 71,
          columnNumber: 13
        }, globalThis) }, void 0, false, {
          fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
          lineNumber: 70,
          columnNumber: 12
        }, globalThis),
        /* @__PURE__ */ jsxDEV(Toaster, {}, void 0, false, {
          fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
          lineNumber: 79,
          columnNumber: 12
        }, globalThis)
      ] }, void 0, true, {
        fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
        lineNumber: 69,
        columnNumber: 11
      }, globalThis) }, void 0, false, {
        fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
        lineNumber: 68,
        columnNumber: 10
      }, globalThis)
    },
    void 0,
    false,
    {
      fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
      lineNumber: 61,
      columnNumber: 9
    },
    globalThis
  ) }, void 0, false, {
    fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
    lineNumber: 60,
    columnNumber: 8
  }, globalThis) }, void 0, false, {
    fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
    lineNumber: 59,
    columnNumber: 7
  }, globalThis) }, void 0, false, {
    fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
    lineNumber: 58,
    columnNumber: 6
  }, globalThis) }, void 0, false, {
    fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
    lineNumber: 57,
    columnNumber: 5
  }, globalThis) }, void 0, false, {
    fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
    lineNumber: 56,
    columnNumber: 4
  }, globalThis) }, void 0, false, {
    fileName: "/__w/interface/interface/packages/admin/src/components/ApplicationEntrypoint.tsx",
    lineNumber: 55,
    columnNumber: 3
  }, globalThis);
};
export {
  ApplicationEntrypoint
};
//# sourceMappingURL=ApplicationEntrypoint.js.map
