import { use } from '../utils';
import { emit, inherit } from '../utils/functional';
import Icon from '../icon';
import Cell from '../cell';
import Button from '../button';
import Radio from '../radio';
import RadioGroup from '../radio-group';

// Types
import { CreateElement, RenderContext } from 'vue/types';
import { DefaultSlots } from '../utils/use/sfc';

export type ContactListItem = {
  id: string | number;
  tel: string | number;
  name: string;
};

export type ContactListProps = {
  value?: any;
  list: ContactListItem[];
  addText?: string;
};

const [sfc, bem, t] = use('contact-list');

function ContactList(
  h: CreateElement,
  props: ContactListProps,
  slots: DefaultSlots,
  ctx: RenderContext<ContactListProps>
) {
  const List = props.list.map((item, index) => {
    const onClick = () => {
      emit(ctx, 'input', item.id);
      emit(ctx, 'select', item, index);
    };

    return (
      <Cell
        key={item.id}
        isLink
        class={bem('item')}
        valueClass={bem('item-value')}
        scopedSlots={{
          default: () => (
            <Radio name={item.id} onClick={onClick}>
              <div class={bem('name')}>{`${item.name},${item.tel}`}</div>
            </Radio>
          ),
          'right-icon': () => (
            <Icon
              name="edit"
              class={bem('edit')}
              onClick={event => {
                event.stopPropagation();
                emit(ctx, 'edit', item, index);
              }}
            />
          )
        }}
        onClick={onClick}
      />
    );
  });

  return (
    <div class={bem()} {...inherit(ctx)}>
      <RadioGroup value={props.value} class={bem('group')}>
        {List}
      </RadioGroup>
      <Button
        square
        size="large"
        type="danger"
        class={bem('add')}
        text={props.addText || t('addText')}
        onClick={() => {
          emit(ctx, 'add');
        }}
      />
    </div>
  );
}

ContactList.props = {
  value: null as any,
  list: Array,
  addText: String
};

export default sfc(ContactList);