// @flow
import * as ICONS from 'constants/icons';
import classnames from 'classnames';
import React from 'react';
import ChannelThumbnail from 'component/channelThumbnail';
import { Menu, MenuList, MenuButton, MenuItem } from '@reach/menu-button';
import ChannelTitle from 'component/channelTitle';
import Icon from 'component/common/icon';

type Props = {
  selectedChannelUrl: string, // currently selected channel
  channels: ?Array<ChannelClaim>,
  onChannelSelect: (url: string) => void,
};

type ListItemProps = {
  uri: string,
  isSelected?: boolean,
};

function ChannelListItem(props: ListItemProps) {
  const { uri, isSelected = false } = props;

  return (
    <div className={classnames('channel__list-item', { 'channel__list-item--selected': isSelected })}>
      <ChannelThumbnail uri={uri} />
      <ChannelTitle uri={uri} />
      {isSelected && <Icon icon={ICONS.DOWN} />}
    </div>
  );
}

function ChannelSelector(props: Props) {
  const { channels, selectedChannelUrl, onChannelSelect } = props;

  if (!channels || !selectedChannelUrl) {
    return null;
  }

  return (
    <Menu>
      <MenuButton className="">
        <ChannelListItem uri={selectedChannelUrl} isSelected />
      </MenuButton>
      <MenuList className="menu__list channel__list">
        {channels &&
          channels.map(channel => (
            <MenuItem
              key={channel.canonical_url}
              onSelect={() => {
                if (selectedChannelUrl !== channel.canonical_url) {
                  onChannelSelect(channel.canonical_url);
                }
              }}
            >
              <ChannelListItem uri={channel.canonical_url} />
            </MenuItem>
          ))}
      </MenuList>
    </Menu>
  );
}

export default ChannelSelector;
