import { OpenAPI } from "openapi-types";

import WorkspacesIcon from "../../assets/symbols/Workspaces";
import { RouterExtension } from "../../router/Router";
import { NavigationOverrides, PageComponent } from "../../types";

export * from "./types/article";

const routes: Record<
  string,
  Record<
    string,
    {
      // eslint-disable-next-line @typescript-eslint/no-explicit-any
      page: () => PageComponent<any> | Promise<PageComponent<any>>;
      request?: OpenAPI.Request;
      defaultRequest?: OpenAPI.Request;
      offline?: boolean;
    }
  >
> = {
  article: {
    create: { page: async () => (await import("./pages/article/create")).default, offline: true },
    detail: { page: async () => (await import("./pages/article/detail")).default },
    list: { page: async () => (await import("./pages/article/list")).default },
  },
};

export const router: RouterExtension = {
  app: "catalog",
  pages: (route) => {
    const { page, ...hit } = routes[route.view]?.[route.action] ?? {};

    if (page != null) {
      return {
        page: page(),
        ...hit,
      };
    }

    return undefined;
  },
};

export const navigation: NavigationOverrides = {
  "catalog.article:list": {
    icon: WorkspacesIcon,
    permission: "catalog.view_article",
  },
} as const;
