/*
 This file is part of GNU Taler
 (C) 2021 Taler Systems S.A.
 GNU Taler is free software; you can redistribute it and/or modify it under the
 terms of the GNU General Public License as published by the Free Software
 Foundation; either version 3, or (at your option) any later version.
 GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 You should have received a copy of the GNU General Public License along with
 GNU Taler; see the file COPYING.  If not, see 
 */
import { ComponentChildren, Fragment, h, VNode } from "preact";
import Match from "preact-router/match";
import { useEffect, useState } from "preact/hooks";
import { AdminPaths } from "../../AdminRoutes.js";
import { InstancePaths } from "../../InstanceRoutes.js";
import { Notification } from "../../utils/types.js";
import { NavigationBar } from "./NavigationBar.js";
import { Sidebar } from "./SideBar.js";
function getInstanceTitle(path: string, id: string): string {
  switch (path) {
    case InstancePaths.update:
      return `${id}: Settings`;
    case InstancePaths.order_list:
      return `${id}: Orders`;
    case InstancePaths.order_new:
      return `${id}: New order`;
    case InstancePaths.product_list:
      return `${id}: Products`;
    case InstancePaths.product_new:
      return `${id}: New product`;
    case InstancePaths.product_update:
      return `${id}: Update product`;
    case InstancePaths.reserves_new:
      return `${id}: New reserve`;
    case InstancePaths.reserves_list:
      return `${id}: Reserves`;
    case InstancePaths.transfers_list:
      return `${id}: Transfers`;
    case InstancePaths.transfers_new:
      return `${id}: New transfer`;
    default:
      return "";
  }
}
function getAdminTitle(path: string, instance: string) {
  if (path === AdminPaths.new_instance) return `New instance`;
  if (path === AdminPaths.list_instances) return `Instances`;
  return getInstanceTitle(path, instance);
}
interface MenuProps {
  title?: string;
  instance: string;
  admin?: boolean;
  onLogout?: () => void;
  setInstanceName: (s: string) => void;
}
function WithTitle({
  title,
  children,
}: {
  title: string;
  children: ComponentChildren;
}): VNode {
  useEffect(() => {
    document.title = `Taler Backoffice: ${title}`;
  }, [title]);
  return {children};
}
export function Menu({
  onLogout,
  title,
  instance,
  admin,
  setInstanceName,
}: MenuProps): VNode {
  const [mobileOpen, setMobileOpen] = useState(false);
  return (
    
      {({ path }: any) => {
        const titleWithSubtitle = title
          ? title
          : !admin
          ? getInstanceTitle(path, instance)
          : getAdminTitle(path, instance);
        const adminInstance = instance === "default";
        const mimic = admin && !adminInstance;
        return (
          
            
          
        );
      }}
    
  );
}
interface NotYetReadyAppMenuProps {
  title: string;
  onLogout?: () => void;
}
interface NotifProps {
  notification?: Notification;
}
export function NotificationCard({
  notification: n,
}: NotifProps): VNode | null {
  if (!n) return null;
  return (
    
      
        
          
            
            {n.description && (
              
                {n.description}
                {n.details && 
{n.details}}
              
 
            )}
          
         
       
     
  );
}
export function NotYetReadyAppMenu({
  onLogout,
  title,
}: NotYetReadyAppMenuProps): VNode {
  const [mobileOpen, setMobileOpen] = useState(false);
  useEffect(() => {
    document.title = `Taler Backoffice: ${title}`;
  }, [title]);
  return (
     setMobileOpen(false)}
    >
       setMobileOpen(!mobileOpen)}
        title={title}
      />
      {onLogout && (
        
      )}
    
  );
}