/*
 * Copyright (c) All respective contributors to the Peridot Project. All rights reserved.
 * Copyright (c) 2021-2022 Rocky Enterprise Software Foundation, Inc. All rights reserved.
 * Copyright (c) 2021-2022 Ctrl IQ, Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its contributors
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

import { MoonIcon, SunIcon } from '@chakra-ui/icons';
import {
  Box,
  HStack,
  Text,
  Link as ChakraLink,
  useColorMode,
  IconButton,
  useColorModeValue,
  DarkMode,
} from '@chakra-ui/react';
import { RESFLogo } from 'common/ui/RESFLogo';
import React from 'react';
import { Route, Switch } from 'react-router';
import { Link } from 'react-router-dom';

import { COLOR_RESF_BLUE, COLOR_RESF_GREEN } from '../styles';
import { Overview } from './Overview';
import { ShowErrata } from './ShowErrata';

export const Root = () => {
  const { colorMode, toggleColorMode } = useColorMode();

  const SwitchIcon = useColorModeValue(MoonIcon, SunIcon);
  const bodyBg = useColorModeValue('gray.100', 'gray.900');

  return (
    <Box
      display="flex"
      width="100%"
      minHeight="100vh"
      flexDirection="column"
      alignItems="stretch"
    >
      <Box
        as="header"
        background={`linear-gradient(to bottom right, ${COLOR_RESF_GREEN}, ${COLOR_RESF_BLUE})`}
        display="flex"
        flexDirection="row"
        alignItems="center"
        justifyContent="space-between"
        py="1"
        px={4}
      >
        <Link to="/" className="no-underline text-white">
          <HStack flexGrow={1} height="90%" spacing="2">
            <RESFLogo className="fill-current text-white" />
            <Text
              as="h1"
              borderLeft="1px solid"
              pl="2"
              lineHeight="30px"
              fontSize="xl"
              fontWeight="300"
              color="white"
              whiteSpace="nowrap"
            >
              Product Errata
            </Text>
          </HStack>
        </Link>
        <DarkMode>
          <IconButton
            size="md"
            fontSize="lg"
            aria-label={`Switch to ${
              colorMode === 'light' ? 'dark' : 'light'
            } mode`}
            variant="ghost"
            onClick={toggleColorMode}
            icon={<SwitchIcon />}
          />
        </DarkMode>
      </Box>
      <Box as="main" flexGrow={1} overflow="auto" background={bodyBg}>
        <Switch>
          <Route path="/" exact component={Overview} />
          <Route path="/:id" component={ShowErrata} />
        </Switch>
      </Box>
      <Box
        as="footer"
        px="4"
        // backgroundColor="#10859E"
        background={`linear-gradient(to top left, ${COLOR_RESF_GREEN}, ${COLOR_RESF_BLUE})`}
        color="white"
        display="flex"
        height="50px"
      >
        <ChakraLink
          href="/api/v2/advisories:rss"
          isExternal
          display="flex"
          alignItems="center"
          my="auto"
        >
          <Box
            as="svg"
            viewBox="0 0 24 24"
            width="18px"
            height="18px"
            fill="none"
            stroke="currentColor"
            strokeWidth="2"
            strokeLinecap="round"
            strokeLinejoin="round"
            display="block"
            mr={1.5}
          >
            <path d="M4 11a9 9 0 019 9M4 4a16 16 0 0116 16" />
            <circle cx="5" cy="19" r="1" />
          </Box>
          <span>RSS</span>
        </ChakraLink>
      </Box>
    </Box>
  );
};
