import React from "react";
import { NextPageWithLayout } from "./_app";
import Head from "next/head";
import logoImg from "../ui/assets/logo.png";
import Image from "next/image";
import { Button, Card, Colors, Icon, Text } from "@blueprintjs/core";
import Link from "next/link";
import { useDarkMode } from "../ui/providers/dark-mode-provider";
import LANGUAGES from "./languages.json";
import { Providers } from "../ui/providers";

const styles = {
  topPanel: {
    position: "absolute" as "absolute",
    top: 0,
    right: 0,
    padding: 10,
  },
  rootContainer: {
    height: "100%",
    display: "flex",
    flexDirection: "column" as "column",
    alignItems: "center",
    justifyContent: "center",
    padding: "10%",
    textAlign: "center" as "center",
  },
  headerContainer: {
    display: "flex",
    alignItems: "center",
  },
  langsContainer: {
    marginTop: 30,
    width: "100%",
    display: "flex",
    flexWrap: "wrap" as "wrap",
    alignContent: "flex-start",
    justifyContent: "center",
  },
  langCard: {
    minWidth: 200,
    textAlign: "center" as "center",
    margin: 20,
    padding: "30px 0",
  },
};

const Index: NextPageWithLayout = () => {
  const DarkMode = useDarkMode();
  const backgroundColor = DarkMode.isDark ? Colors.DARK_GRAY3 : Colors.WHITE;

  return (
    <>
      <Head>
        <title>Esolang Park</title>
      </Head>
      {/* Buttons in the top-right */}
      <div style={styles.topPanel}>
        <Button
          minimal
          title="Toggle light mode"
          icon={<Icon icon={DarkMode.isDark ? "flash" : "moon"} />}
          onClick={DarkMode.toggleDark}
        />
      </div>
      {/* Container for center content */}
      <div style={{ ...styles.rootContainer, backgroundColor }}>
        {/* Project heading */}
        <div style={styles.headerContainer}>
          <div style={{ flexGrow: 0, marginRight: 10 }}>
            <Image src={logoImg} alt="logo" width={52} height={52} />
          </div>
          <Text tagName="div">
            <h1>Esolang Park</h1>
          </Text>
        </div>

        {/* Language cards */}
        <div style={styles.langsContainer}>
          {LANGUAGES.map(({ display, id }) => (
            <Link href={`/ide/${id}`} key={id}>
              <a style={{ all: "unset" }}>
                <Card interactive style={styles.langCard}>
                  <Text style={{ fontWeight: "bold" }}>{display}</Text>
                </Card>
              </a>
            </Link>
          ))}
        </div>
      </div>
    </>
  );
};

// Feature guide should not be shown on the home page
Index.getLayout = function getLayout(page: React.ReactNode) {
  return <Providers omitFeatureGuide={true}>{page}</Providers>;
};

export default Index;