import { createRouter, createWebHistory } from "vue-router";
import DashboardView from "../views/DashboardView.vue";
import LoginView from "../views/LoginView.vue";
import { workflowRoutes } from "@/router/workflowRoutes";
import { s3Routes } from "@/router/s3Routes";
import { resourceRoutes } from "@/router/resourceRoutes";
import { adminRoutes } from "@/router/adminRoutes";
import ImprintView from "@/views/ImprintView.vue";
import PrivacyPolicyView from "@/views/PrivacyPolicyView.vue";
import TermsOfUsageView from "@/views/TermsOfUsageView.vue";

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/dashboard",
      name: "dashboard",
      component: DashboardView,
      children: [
        ...resourceRoutes,
        ...s3Routes,
        ...workflowRoutes,
        ...adminRoutes,
      ],
    },
    {
      path: "/login",
      name: "login",
      component: LoginView,
      meta: {
        title: "Login",
      },
      props: (route) => ({
        returnPath: route.query.next ?? undefined,
        loginError: route.query.login_error ?? undefined,
        invitationToken: route.query.invitation_token ?? undefined,
      }),
    },
    {
      path: "/",
      redirect: {
        name: "buckets",
      },
    },
    {
      path: "/privacy",
      name: "privacy",
      meta: {
        title: "Privacy Policy",
      },
      component: PrivacyPolicyView,
    },
    {
      path: "/terms",
      name: "terms",
      meta: {
        title: "Terms of Usage",
      },
      component: TermsOfUsageView,
    },
    {
      path: "/imprint",
      name: "imprint",
      meta: {
        title: "Imprint",
      },
      component: ImprintView,
    },
    {
      path: "/:pathMatch(.*)",
      meta: {
        title: "Error",
      },
      component: () => import("../views/NotFoundView.vue"),
    },
  ],
});

router.afterEach((to) => {
  if (to.meta?.title) {
    document.title = to.meta.title + " - CloWM";
  }
});

export default router;