internal/dashboard/frontend/src/routes.ts

import type { RouteRecordRaw } from "vue-router";
import HomeView from "./views/HomeView.vue";
import LoginView from "./views/LoginView.vue";
import LogView from "./views/LogView.vue";

const ChartView = () => import("./views/ChartView.vue");
const EntityDetailView = () => import("./views/EntityDetailView.vue");

export const routes: RouteRecordRaw[] = [
  { path: "/login", component: LoginView, name: "login" },
  { path: "/", component: HomeView, name: "home" },
  { path: "/events", component: LogView, name: "events" },
  {
    path: "/charts",
    component: ChartView,
    children: [
      { path: "", redirect: "/charts/port" },
      {
        path: "port",
        component: () => import("./views/PortChart.vue"),
        name: "charts-port",
      },
      {
        path: "map",
        component: () => import("./views/MapChart.vue"),
        name: "charts-map",
      },
      {
        path: "activity",
        component: () => import("./views/ActivityChart.vue"),
        name: "charts-activity",
      },
    ],
  },
  {
    path: "/stats",
    component: () => import("./views/StatsView.vue"),
    name: "stats",
  },
  { path: "/ip/:ip", component: EntityDetailView, name: "ip" },
  { path: "/ip/:ip/:mask", component: EntityDetailView, name: "subnet" },
  { path: "/port/:port", component: EntityDetailView, name: "port" },
  {
    path: "/city/:value",
    component: EntityDetailView,
    props: { type: "city" },
    name: "city",
  },
  {
    path: "/country/:value",
    component: EntityDetailView,
    props: { type: "country" },
    name: "country",
  },
  {
    path: "/asn/:value",
    component: EntityDetailView,
    props: { type: "asn" },
    name: "asn",
  },
  {
    path: "/domain/:value",
    component: EntityDetailView,
    props: { type: "domain" },
    name: "domain",
  },
  {
    path: "/fqdn/:value",
    component: EntityDetailView,
    props: { type: "fqdn" },
    name: "fqdn",
  },
  {
    path: "/honeypot/:honeypot",
    component: EntityDetailView,
    name: "honeypot",
  },
];