import React, { memo } from 'react';
import { FiUsers, FiSearch, FiX } from 'react-icons/fi';
import Navicon from 'components/ui/Navicon';
import Button from 'components/ui/Button';
import Editable from 'components/ui/Editable';
import { isValidServerName } from 'state/servers';
import { isChannel } from 'utils';

const ChatTitle = ({
  status,
  title,
  tab,
  channel,
  openModal,
  onTitleChange,
  onToggleSearch,
  onToggleUserList,
  onCloseClick
}) => {
  let closeTitle;
  if (isChannel(tab)) {
    closeTitle = 'Leave';
  } else if (tab.name) {
    closeTitle = 'Close';
  } else {
    closeTitle = 'Disconnect';
  }

  let serverError = null;
  if (!tab.name && status.error) {
    serverError = (
      <span className="chat-topic error">Error: {status.error}</span>
    );
  }

  return (
    <div>
      <div className="chat-title-bar">
        <Navicon />
        <Editable
          className="chat-title"
          editable={!tab.name}
          value={title}
          validate={isValidServerName}
          onChange={onTitleChange}
        >
          <span className="chat-title">{title}</span>
        </Editable>
        <div className="chat-topic-wrap">
          {channel && channel.topic && (
            <span
              className="chat-topic"
              onClick={() => openModal('topic', channel.name)}
            >
              {channel.topic}
            </span>
          )}
          {serverError}
        </div>
        {tab.name && (
          <Button
            icon={FiSearch}
            title="Search"
            aria-label="Search"
            onClick={onToggleSearch}
          />
        )}
        <Button
          icon={FiX}
          title={closeTitle}
          aria-label={closeTitle}
          onClick={onCloseClick}
        />
        <Button
          icon={FiUsers}
          className="button-userlist"
          aria-label="Users"
          onClick={onToggleUserList}
        />
      </div>
      <div className="userlist-bar">
        <FiUsers />
        {channel && channel.users.length}
      </div>
    </div>
  );
};

export default memo(ChatTitle);