import { getRandomNumber } from '@/utils';
import { stemTypeList, questionNumberTypeList, scoreTypeList, switchOption, fontSizeList } from './common';
import { Message } from 'element-ui';

export function getOption(type = 'option', text = '') {
  if (type === 'reference') {
    return {
      text,
    };
  }
  return {
    mark: getRandomNumber(),
    text,
    type: text.length > 0 ? 'text' : 'input',
  };
}

/**
 * 解析智能识别数据
 * @param {array} arr 智能识别数据
 * @returns object
 */
export function analysisRecognitionTableFillData(arr) {
  if (arr.length === 0) return {};
  // 表头
  let headerNum = arr[0].split('-').length;
  if (headerNum > 1 && (headerNum < 2 || headerNum > 5)) {
    Message.error('填表题行数在2-5之间');
    return {};
  }
  let is_enable_table_header = switchOption[0].value;
  let column_number = 2;
  let option_header_list = [];
  if (headerNum > 1) {
    is_enable_table_header = switchOption[1].value;
    column_number = headerNum;
    option_header_list = arr[0]
      .split('-')
      .map((item) => ({ mark: getRandomNumber(), text: item, width: 100 / headerNum }));
    arr.shift();
  } else {
    is_enable_table_header = switchOption[0].value;
    option_header_list = [];
  }

  // 通过正则表达式匹配出表格内容
  let matches = arr.map((str) => {
    return str.match(/[(（](.*?)[)）]/g).map((item) => item.replace(/[(（](.*?)[)）]/g, '$1'));
  });
  let isMate = matches.every((item) => {
    if (item.length !== headerNum) {
      Message.error('填表题表格列数不匹配');
      return false;
    }
    return true;
  });
  if (!isMate) return {};
  const row_number = matches.length;
  if (row_number < 1 || row_number > 30) {
    Message.error('填表题行数在1-30之间');
    return {};
  }
  const option_list = matches.map((item) => item.map(getOption));

  return {
    'data.property.is_enable_table_header': is_enable_table_header,
    'data.property.column_number': column_number,
    'data.option_header_list': option_header_list,
    'data.property.row_number': row_number,
    'data.option_list': option_list,
  };
}

/**
 * 获取填表题数据模板（防止 mark 重复）
 * @returns {object} 判断题数据模板
 */
export function getTableFillData() {
  return {
    type: 'table_fill', // 题型
    stem: '', // 题干
    description: '', // 描述
    analysis: '', // 解析，富文本
    reference_answer: '', // 参考答案
    // 参考答案表头
    reference_answer_option_header_list: [
      { mark: getRandomNumber(), text: '', width: 50 },
      { mark: getRandomNumber(), text: '', width: 50 },
    ],
    // 参考答案列表
    reference_answer_option_list: [
      Array.from({ length: 2 }, () => getOption('reference')),
      Array.from({ length: 2 }, () => getOption('reference')),
    ],
    option_header_list: [
      { mark: getRandomNumber(), text: '', width: 50 },
      { mark: getRandomNumber(), text: '', width: 50 },
    ], // 选项头部
    option_list: [Array.from({ length: 2 }, () => getOption()), Array.from({ length: 2 }, () => getOption())], // 选项列表
    answer: {
      score: 1,
      score_type: scoreTypeList[0].value,
      answer_list: [],
    }, // 答案
    // 题型属性
    property: {
      stem_type: stemTypeList[1].value, // 题干类型
      question_number: '1', // 题号
      stem_question_number_font_size: fontSizeList[6], // 题干题号
      is_enable_table_header: switchOption[0].value, // 是否启用表头
      is_enable_description: switchOption[1].value, // 描述
      is_enable_analysis: switchOption[1].value, // 是否开启解析
      is_enable_reference_answer: switchOption[0].value, // 参考答案
      score: 1, // 分值
      score_type: scoreTypeList[0].value, // 分值类型
      is_enable_number_column: switchOption[0].value, // 是否启用序号列
      form_width: 800, // 表格宽度 100 - 3000
      row_number: 2, // 行数 1 - 30
      column_number: 2, // 列数 2 - 5
    },
    // 其他属性
    other: {
      question_number_type: questionNumberTypeList[1].value, // 题号类型
    },
  };
}
