import { getLanguage } from '@/views/Survey/views/Preview/js/language';
import type { IQuestionOption } from '@/types/question';
import type { IMatrixCheckboxConfig } from '@/types/questions/matrixCheckbox';

/**
 * 矩阵多选题校验
 * @param answer 答案
 * @param config 配置
 * @param options 选项
 * @param translatedText 语言
 */
function validateMatrixCheckbox(
  answer: number[][],
  config: IMatrixCheckboxConfig,
  options: IQuestionOption[],
  translatedText = getLanguage(['zh'])
) {
  const [rows, cols] = options;
  // 矩阵多选题，列选项分组时，校验选项数量
  // const cellGroups = (config?.cell_option_groups?.option_group || []).filter(
  //   (i) => i.groups?.length
  // );
  // if (cellGroups.length) {
  //   const rows = question.list.reduce(
  //     (p, c) => [...p, ...(c.type === 1 ? c.options || [] : [])],
  //     []
  //   );
  //   const cols = question.list.reduce(
  //     (p, c) => [...p, ...(c.type === 2 ? c.options || [] : [])],
  //     []
  //   );
  //   const freeCols = cols.filter(
  //     (col) => !cellGroups.some((g) => g.groups.find((c) => c.option_key === col.option_key))
  //   );
  //
  //   const arr = rows.map((row) => {
  //     return cellGroups.map((group) => {
  //       return group.groups.map((col) => {
  //         return `${row.option_key}_${col.option_key}`;
  //       });
  //     });
  //   });
  //   arr.forEach((a, idx) =>
  //     a.push(freeCols.map((col) => `${rows[idx].option_key}_${col.option_key}`))
  //   );
  //   const answered = Object.keys(answer);
  //
  //   cellGroups.forEach((group, idx) => {
  //     if (!group.groups?.length || (!group.max && !group.min) || isError) {
  //       return;
  //     }
  //
  //     for (let i = 0; i < arr.length; i += 1) {
  //       const row = arr[i];
  //       const selectedCount = row[idx].filter((key) => answered.includes(key)).length;
  //       if (group.min && selectedCount < group.min) {
  //         isError = true;
  //         question.error = translatedText.value.PleaseSelectAtLeastOneOptionsInTitleGroup(
  //           group.min,
  //           group.title
  //         );
  //         break;
  //       }
  //       if (group.max && selectedCount > group.max) {
  //         isError = true;
  //         question.error = translatedText.value.PleaseSelectAtMostOneOptionsInTitleGroup(
  //           group.max,
  //           group.title
  //         );
  //         break;
  //       }
  //     }
  //   });
  // }
  // 最少选择数量校验
  // 转换配置值为数字
  const minSelect = +config.min_select;
  const maxSelect = +config.max_select;
  // 如果选项为空，直接返回空字符串
  if (!options.length) {
    return '';
  }

  // 错误信息
  let errorMessage = '';

  // 最大和最小选择数量校验
  answer.forEach((row, rowIndex) => {
    // 如果没有最小选择要求或最小选择为0，不进行最小值校验
    if (minSelect >= 0 && row.length < minSelect) {
      // 如果已经有错误信息，不进行最小值校验
      if (errorMessage) return;
      // 是否行列转换
      errorMessage = config.is_change_row_cell
        ? translatedText.PleaseSelectAtLeastOneOptionsPerColumn(minSelect, rowIndex)
        : translatedText.PleaseSelectAtLeastOneOptionsPerLine(minSelect, rowIndex);
    }

    // 如果有最大选择限制，进行最大值校验
    if (maxSelect > 0 && row.length > maxSelect) {
      // 如果已经有错误信息，不进行最大值校验
      if (errorMessage) return;
      // 是否行列转换
      errorMessage = config.is_change_row_cell
        ? translatedText.PleaseSelectLessOptionsPerColumn(maxSelect, rowIndex)
        : translatedText.PleaseSelectLessOptionsPerLine(maxSelect, rowIndex);
    }
  });
  console.log(rows.options!.length, answer.length);
  // 检测所有的答案是否正常选择
  if (errorMessage.length === 0 && rows.options!.length > answer.length) {
    errorMessage = translatedText.PleaseSelectAllRows;
  }
  return errorMessage;
}

export { validateMatrixCheckbox };
