<script>
  import { onMount } from 'svelte';
  import Sidebar from "$/client/components/Sidebar.svelte";
  import TableIndex from "$/admin/pages/TableIndex.svelte";
  import EmailDNS from "$/admin/pages/EmailDNS.svelte";
  import EmailSend from "$/admin/pages/EmailSend.svelte";
  import Stats from "$/admin/pages/Stats.svelte";
  import IconFinder from "$/admin/bando/IconFinder.svelte";
  import Djenterator from "$/admin/bando/Djenterator.svelte";
  import Layout from "$/admin/Layout.svelte";
  import { replace } from "svelte-spa-router";

  export let params={what: "tables"};

  let panels = [
    {url: "tables", title: "Tables", active: true, icon: "database", component: TableIndex},
    {url: "errors", title: "Errors", active: false, icon: "alert-circle", href: "/admin/#/errors/"},
    {url: "icons", title: "Icons", active: false, icon: "smile", component: IconFinder},
    {url: "demos", title: "Components", active: false, icon: "component", href: "/admin/#/bando/components/"},
    {url: "docs", title: "API Docs", active: false, icon: "book", href: "/admin/#/docs/"},
    {url: "routes", title: "Routes", active: false, icon: "code-2", href: "/admin/#/routes/"},
    {url: "djenterator", title: "Djenterator", active: false, icon: "layout-template", component: Djenterator},
    {url: "email-dns", title: "Email DNS", active: false, icon: "mail-check", component: EmailDNS},
    {url: "email-send", title: "Email Send", active: false, icon: "mails", component: EmailSend},
    {url: "stats", title: "Stats", active: false, icon: "activity", component: Stats},
  ];

  let selected = panels[0];

  const sidebar_select = (event) => {
    const { index, item } = event.detail;

    selected = item;

    replace(`/${ selected.url }/`);

    panels = panels.map((x, i) => {
      x.active = i == index;
      return x;
    });
  }

  const url_select = (url) => {
    for(let panel of panels) {
      if(url === panel.url) {
        panel.active = true;
        selected = panel;
      } else {
        panel.active = false;
      }
    }
  }

  $:if(selected && params.what && params.what != selected.url) url_select(params.what);

  onMount(() => {
    if(params.what) {
      url_select(params.what);
    }
  });

</script>

<style>
  right {
    flex-direction: column;
    padding: 0.5rem;
    min-height: calc(100vh - var(--fixed-header-height));
    max-height: calc(100vh - var(--fixed-header-height));
    height: calc(100vh - var(--fixed-header-height));
    min-width: calc(100% - 300px);
    max-width: calc(100% - 300px);
    width: calc(100% - 300px);
    overflow-y: auto;
  }

  left {
    display: flex;
    max-width: min-content;
    min-height: calc(100vh - var(--fixed-header-height));
    max-height: calc(100vh - var(--fixed-header-height));
    height: calc(100vh - var(--fixed-header-height));
  }

  content {
    padding: 0px !important;
  }
</style>

<Layout fullwidth={ true } fixed={ true } footer={false} authenticated={ true } testid="page-admin-{ params.what }">
  <content>
    <left>
      <Sidebar on:select={ sidebar_select } menu={ panels }>
        <div slot="top">
          <h3>Admin Dashboard</h3>
        </div>
      </Sidebar>
    </left>

    <right>
      <svelte:component this={selected.component} />
    </right>
  </content>
</Layout>
