import React,{Component} from 'react';
import classNames from 'classnames';
import RadioDrop from "@containers/RadioDrop";
import NumberDrop from "@containers/NumberDrop";
import InlineTag from '@containers/InlineTag';
import addIcon from '@images/addItem.png';
import style from "./index.less";
import tools from '@utils/tools';
import NumberUnitDrop from '@containers/NumberUnitDrop';

/****
 * 多标签组合
 * author:zn@2018-11.26
 * 接收参数：
 * data:标签内容数据
 * showArr:显示下拉总对象
 * ikey：当前组件唯一标识，由模块index+标签index+标签内index三个组成的字符串
 *
 *
 *
 * ***/

class MultSpread extends Component{
  constructor(props){
    super(props);
    this.state = {
      editable: false,
    };
    this.changeToEdit = this.changeToEdit.bind(this);
    this.handleEdit = this.handleEdit.bind(this);
  }
  getClass(){
    const {saveText,ikey,showAdd} = this.props;
    const labelInx = ikey.substr(1);
    const text = saveText&&saveText[+labelInx];
    const isSelected = text?style['selected']:style['container'];
    const hasAdd = showAdd?style['add']:'';
    return classNames(isSelected,hasAdd);
  }
  getLabels(){
    const {data,ikey,showArr,copyId} = this.props;
    let inx = '';
    const list = data.map((it,i)=>{
      inx=ikey+''+i;
      switch (+it.controlType){
        case 0:
        case 1:
          const list = it.questionDetailList&&it.questionDetailList.length>0?it.questionDetailList:it.questionMapping;
          return <RadioDrop data={list}
                            prefix={it.labelPrefix}
                            suffix={it.labelSuffix}
                            placeholder={it.name}
                            show={showArr&&showArr[inx]}
                            value = {it.value}
                            ikey={inx}
                            id={it.id}
                            patId = {copyId}
                            hideTag={true}></RadioDrop>;
        case 5://带单位数字键盘
        return <NumberUnitDrop prefix={it.labelPrefix}
                               suffix={it.labelSuffix}
                               placeholder={it.name}
                               boxMark={ikey.substr(0,1)}
                               id={it.id}
                               show={showArr&&showArr[inx]}
                               ikey={inx}
                               value={it.value}
                               hideTag={true}></NumberUnitDrop>;
        case 3:
        case 6:
          return <InlineTag prefix={it.labelPrefix}
                            suffix={it.labelSuffix}
                            placeholder={it.name}
                            value={it.value}
                            id={it.id}
                            ikey={inx} hideTag={true}></InlineTag>;
        case 7:
          return <NumberDrop prefix={it.labelPrefix}
                             suffix={it.labelSuffix}
                             placeholder={it.name}
                             show={showArr&&showArr[inx]}
                             ikey={inx}
                             id={it.id}
                             patId = {copyId}
                             value={it.value}
                             hideTag={true}></NumberDrop>;
        default:
          return '';
      }
    });
    return list;
  }
  changeToEdit(e){
    const {name,copyId,ikey,placeholder,handleDbclick,saveText,prefix,suffix} = this.props;
    const labelInx = ikey.substr(1);
    const text = saveText&&saveText[+labelInx];
    //clearTimeout(this.state.timer);//取消延时的单击事件
    e.preventDefault();
    if(text&&text.trim()) {//有选中值的标签才能双击编辑
      this.setState({
        editable: true
      });
      //e.target.focus();
      //双击埋点记录
      handleDbclick && handleDbclick({id:copyId});
    }
  }
  handleEdit(e){
    const {saveEditText,ikey} = this.props;
    if(!this.state.editable) return;
    this.setState({
      editable: false
    });
    let totalVal = e.target.innerText;
    saveEditText && saveEditText({ikey,type:'4',totalVal});
  }
  componentDidMount(){
    //挂载完成保存有加号的项目数据
    const {saveAddItem,fullData,copyId,showAdd} = this.props;
    if(showAdd){
      const data = tools.deepClone(fullData);
      saveAddItem&&saveAddItem(copyId,data);
    }
  }
  render(){
    const {showAdd,addLabelItem,ikey,copyId,textPrefix,textSuffix} = this.props;
    return (<div style={{display:'inline-block'}}
                 onDoubleClick={this.changeToEdit}
                 contentEditable={this.state.editable}
                 onBlur={this.handleEdit}>
      {textPrefix?<span>{textPrefix}</span>:''}
      <div className={this.getClass()}>
      {this.getLabels()} 
      {showAdd?<img src={addIcon} alt="添加血压项"
                    className={style['add-icon']}
                    onClick={()=>addLabelItem({ikey,copyId})}/>:''}
    </div>
    {textSuffix?<span>{textSuffix}</span>:''}
    </div>)
  }
}

export default MultSpread;