/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import HomeOutlinedIcon from '@mui/icons-material/HomeOutlined';
import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined';
import FoundationIcon from '@mui/icons-material/Foundation';
import RefreshIcon from '@mui/icons-material/Refresh';

import { ReactComponent as EventMeshLogoIcon } from './eventmesh-logo.svg';
import { ReactComponent as EventMeshTopicIcon } from './eventmesh-topic.svg';
import { ReactComponent as HomeIcon } from './home.svg';
import { ReactComponent as RuntimeIcon } from './runtime.svg';
import { ReactComponent as TopicIcon } from './topic.svg';
import { ReactComponent as ConnectionIcon } from './connection.svg';
import { ReactComponent as MessageIcon } from './message.svg';
import { ReactComponent as SecurityIcon } from './security.svg';

import { ReactComponent as SettingsIcon } from './settings.svg';
import { ReactComponent as UsersIcon } from './users.svg';
import { ReactComponent as LogsIcon } from './logs.svg';


export const Icons = {
  HomeOutlined: HomeOutlinedIcon,
  AddCircleOutlineOutlined: AddCircleOutlineOutlinedIcon,
  Foundation: FoundationIcon,
  Refresh: RefreshIcon,

  EventMeshLogo: EventMeshLogoIcon,
  EventMeshTopic: EventMeshTopicIcon,

  Home: HomeIcon,
  Runtime: RuntimeIcon,
  Topic: TopicIcon,
  Connection: ConnectionIcon,
  Message: MessageIcon,
  Security: SecurityIcon,

  Settings: SettingsIcon,
  Users: UsersIcon,
  Logs: LogsIcon,
}
