import MixCheckBox from '@containers/MixCheckBox';
import RadioDrop from "@containers/RadioDrop";
import NumberDrop from "@containers/NumberDrop";
import MultSpread from "@containers/MultSpread";
import SpreadDrop from "@containers/SpreadDrop";
import EditableSpan from '@containers/EditableSpan';
import InlineTag from '@containers/InlineTag';
import NumberUnitDrop from '@containers/NumberUnitDrop';

/******
 * 下拉类型分发
 * 先根据tagType分为几个大类填写单
 * 再根据controlType判断子项（列）类型
 * tagType：1：单项单列，例如： 程度，咳出通畅度  2：单项多列，例如：杂音，添加症状 3：横铺单标签形式，例如：血压 4：横铺多标签形式，例如：咳嗽 5：竖铺组合项，例如：有无治疗 6：组合项多列 既往史
 * controlType控件类型：(0：无类型，默认值 1：下拉单选 2：下拉多选 3：纯文本 4：待定 5：待定 6：文本框 7：数字键盘文本框 99：联合推送)
 *
 * *******/
//单选类型
export function singleRadio(params){
  const data = params.item;
  const {i,hideTag,boxMark,showArr} = params;
  const showInx = boxMark+i+'0';    //单括号多标签的情况下需要识别同一个标签内多个下拉组件的显示状态
  switch (+data.controlType){
    case 0:
    case 1:
      const list = data.questionDetailList&&data.questionDetailList.length>0?data.questionDetailList:data.questionMapping;
      return <RadioDrop data={list}
                        prefix={data.labelPrefix}
                        suffix={data.labelSuffix}
                        placeholder={data.name}
                        show={showArr&&showArr[showInx]}
                        value = {data.value}
                        boxMark={boxMark}
                        id={data.id}
                        ikey={showInx}
                        hideTag={hideTag}></RadioDrop>;
    case 3:
      return <EditableSpan {...params} value={data.value||data.name} update={Math.random()}/>;
    case 5://带单位数字键盘
      return <NumberUnitDrop prefix={data.labelPrefix}
                         suffix={data.labelSuffix}
                         placeholder={data.name}
                         boxMark={boxMark}
                         id={data.id}
                         show={showArr&&showArr[showInx]}
                         ikey={showInx}
                         value={data.value}
                         hideTag={hideTag}></NumberUnitDrop>;
    case 6:
      return <InlineTag prefix={data.labelPrefix}
                        suffix={data.labelSuffix}
                        placeholder={data.name}
                        value={data.value}
                        id={data.id}
                        ikey={showInx}></InlineTag>;
    case 7:
      return <NumberDrop prefix={data.labelPrefix}
                         suffix={data.labelSuffix}
                         placeholder={data.name}
                         boxMark={boxMark}
                         id={data.id}
                         show={showArr&&showArr[showInx]}
                         ikey={showInx}
                         value={data.value}
                         hideTag={hideTag}></NumberDrop>;
    default:
      return '';
  }
}

//多标签组合型
function multLabels(params){
  const data = params.item;
  const {i,boxMark,showArr,saveText} = params;
  return <MultSpread data={data.questionMapping}
                     showAdd = {+data.showAdd===1}
                     copyId={data.id}
                     fullData = {data}
                     showArr={showArr||{}}
                     update={Math.random()}
                     ikey={boxMark+i}
                     saveText={saveText}
                     name={data.name||data.tagName}
                     textPrefix={data.prefix}
                     textSuffix={data.suffix}></MultSpread>
}

//多选标签展开型
function multCheckLabels(params,tagType){
  const data = params.item;
  const {i,boxMark,showArr,selecteds} = params;
  const showInx = boxMark+i+'0';
  return <SpreadDrop data={data.questionMapping}
                     ikey={showInx}
                     placeholder={data.name}
                     value={data.value}
                     copyType={data.copyType}
                     selecteds={selecteds ?selecteds[i]:[]}
                     show={showArr&&showArr[showInx]}
                     order={data.textGenerate}
                     type={boxMark}
                     tagType={tagType}
                     textPrefix={data.prefix}
                     textSuffix={data.suffix}
                     id={data.id}
                     flag={data.flag}></SpreadDrop>
}

export default function(params){
  const data = params.item;
  switch (+data.tagType) {
    case 1:
    case 5:
      return singleRadio(params);
    case 2:
      // return singleChecks(params);
      return multCheckLabels(params,data.tagType);
    case 3:
      return multLabels(params);      //单标签组合展开
    case 4:
      return multLabels(params);      //多标签展开--已废（不会用到）
    case 6:
      return multCheckLabels(params,data.tagType);
    case 8:
      return <EditableSpan {...params} value={data.value||data.name} update={Math.random()}/>;
    case 11://推送类型
      return multCheckLabels(params,data.tagType);
    default:
      return '';
  }
}
