import React from "react";
import styled from "styled-components";
import { Divider, TextSection, Link } from "@components/index";
import colors from "@theme/colors";
import ContactCard from "@components/ContactCard";

import BoardJson from "./board.json";
// import HvtmkJson from "./hvtmk.json";
// import MtmkJson from "./mtmk.json";
// import OptmkJson from "./optmk.json";
// import OtmkJson from "./otmk.json";
// import EPtmkJson from "./eptmk.json";
// import SstmkJson from "./sstmk.json";
// import TtmkJson from "./ttmk.json";
// import UtmkJson from "./utmk.json";
// import YtmkJson from "./ytmk.json";
// import Others from "./others.json";

const orderedCommittees = [
  BoardJson,
  // HvtmkJson,
  // MtmkJson,
  // OptmkJson,
  // OtmkJson,
  // EPtmkJson,
  // SstmkJson,
  // TtmkJson,
  // UtmkJson,
  // YtmkJson,
  // Others,
];

const blankProfile = "/img/blank_profile.png";

const BlueLink = styled(Link)`
  color: ${colors.blue1};

  &:hover {
    color: ${colors.lightBlue};
  }
`;

const IndexUL = styled.ul`
  padding: 0;
  list-style: none;

  li::before {
    content: attr(data-icon);
    margin-right: 4px;
  }
`;

const Index: React.FC<{ committees: typeof orderedCommittees }> = ({ committees }) => (
  <IndexUL>
    {committees.map(({ slug, name_fi }) => (
      <BlueLink to={`#${slug}`} key={slug}>
        <li data-icon="»">
          {name_fi}
        </li>
      </BlueLink>
    ))}
  </IndexUL>
);

const Container = styled.div`
  color: ${colors.darkBlue};

  & > h2 {
    text-transform: uppercase;
    width: 100%;
  }

  & > div {
    display: flex;
    flex-flow: row wrap;
  }
`;

const CommitteeContainer: React.FC<{
  committee: Committee;
}> = ({ committee, children }) => (
  <Container>
    <h2>
      {committee.name_fi || committee.name_en}
    </h2>
    <div>
      {committee.roles.map((role) => (
        role.representatives.map((representative) => (
          <ContactCard
            key={representative.name}
            name={representative.name}
            phone={representative.phone_number}
            email={representative.email}
            image={(committee.name_en === "Board") ? (representative.image || blankProfile) : null}
            role_fi={role.name_fi}
            role_en={role.name_en}
          />
        ))
      ))}
    </div>
    {children}
  </Container>
);

interface Committee {
  name_fi: string;
  name_en: string;
  roles: Array<Role>;
}

interface Role {
  name_fi: string;
  name_en: string;
  representatives: Array<Representative>
}

interface Representative {
  name: string;
  phone_number?: string;
  email?: string;
  image?: string;
}

const ContactsPageView: React.FC = () => (
  <>
    <TextSection>
      <h1>Yhteystiedot</h1>
      <p>
        Asiaa olisi, mutta kehen ottaa yhteyttä?
        <br />
        Tämä sivu yrittää valottaa sen oikean ihmisen puhelinnumeroa ja sähköpostiosoitetta.
      </p>
      <aside>
        <div>
          <h6>Toimikuntaluettelo</h6>
          <Index committees={orderedCommittees} />
        </div>
      </aside>
    </TextSection>

    {orderedCommittees.map((json) => (
      <React.Fragment key={json.slug}>
        {(json.slug !== "board") && (
          <Divider />
        )}
        <TextSection id={json.slug}>
          <CommitteeContainer committee={json}>
            {(json.slug === "board") && (
            <p>
              {"Hallitukseen saa yhteyden lähettämällä sähköpostia "}
              <BlueLink to="mailto:hallitus@sahkoinsinoorikilta.fi">
                hallitus@sahkoinsinoorikilta.fi
              </BlueLink>
            </p>
            )}
          </CommitteeContainer>
        </TextSection>
      </React.Fragment>
    ))}
  </>
);

export default ContactsPageView;
