import React from 'react';
import { ConversationListItemProps } from './ConversationListItem';

import classNames from 'classnames';
import { PubKey } from '../session/types';

export type Props = {
  contacts: Array<ConversationListItemProps>;
  searchTerm: string;
  selectedContact: number;
  onContactSelected: any;
};

export class UserSearchResults extends React.Component<Props> {
  public constructor(props: Props) {
    super(props);
  }

  public render() {
    const { contacts, searchTerm } = this.props;

    const noResults = !contacts || contacts.length <= 0;

    return (
      <div className="module-search-results">
        {noResults ? (
          <div className="module-search-results__no-results">
            {window.i18n('noSearchResults', [searchTerm])}
          </div>
        ) : (
          this.renderContacts(contacts)
        )}
      </div>
    );
  }

  private renderContacts(items: Array<ConversationListItemProps>) {
    return (
      <div className="contacts-dropdown">
        {items.map((contact, index) => this.renderContact(contact, index))}
      </div>
    );
  }

  private renderContact(contact: ConversationListItemProps, index: Number) {
    const { profileName, phoneNumber } = contact;
    const { selectedContact } = this.props;

    const shortenedPubkey = PubKey.shorten(phoneNumber);
    const rowContent = `${profileName} ${shortenedPubkey}`;

    return (
      <div
        className={classNames(
          'contacts-dropdown-row',
          selectedContact === index && 'contacts-dropdown-row-selected'
        )}
        key={contact.phoneNumber}
        onClick={() => this.props.onContactSelected(contact.phoneNumber)}
        role="button"
      >
        {rowContent}
      </div>
    );
  }
}