import { getLanguage } from '@/views/Survey/views/Preview/js/language';
import type { questionOptionType } from '@/types/question';

/**
 * 多选题验证
 * @param answer 答案
 * @param options 选项
 * @param config 配置
 * @param translatedText 错误提示信息
 * @returns 错误信息
 */
function validateMultiSelectQuestion(
  answer: string[],
  options: questionOptionType[],
  config: IChoiceConfig,
  translatedText = getLanguage(['zh'])
) {
  let errorMessage = '';

  // 多选题
  // 如果答案数量小于最小选择的数量
  if (answer.length < Number(config.min_select) && config.min_select) {
    // 选项数量
    // let options: questionOptionType[] = [];
    // 疑问脸
    // 把所有答案汇集到一块，但是题只有一个列表
    // question.value.list.forEach((list) => {
    //   options = [...options, ...list.options];
    // });

    // 查找选择的题目,如果有 排它项 的选项，就不报错
    const index = options.findIndex(
      (option) => option.option_key === Object.keys(answer)[0] + 1 && option.is_remove_other
    );
    // 如果为 -1 则没有找到对应选择的题目，代表用户填空答案
    if (index === -1) {
      errorMessage = translatedText.PleaseSelectAtLeastOneOptions(config.min_select);
    } else {
      errorMessage = '';
    }
  } else if (answer.length > Number(config.max_select) && config.max_select) {
    errorMessage = translatedText.PleaseSelectNoMoreOptions(config.max_select);
  } else if (answer.findIndex((value) => !value) !== -1) {
    errorMessage = translatedText.PleaseInputAValue;
  } else {
    errorMessage = '';
  }

  return errorMessage;

  // 选线分组 相关的配置， 331暂时没有上线的想法
  // if (!errorMessage) {
  //   // 选项分组最少选项数量
  //   config.option_groups?.option_group.some((optionGroup) => {
  //     const { min, title } = optionGroup;
  //     const select = optionGroup.groups.filter((groups) =>
  //       Object.keys(answer).includes(groups.option_key)
  //     );
  //     if (title && select.length < min) {
  //       // 判断隐藏选项
  //       question.value.hideOptionsSet = new Set(question.value.hideOptions);
  //       const options = question.list.flatMap((list) =>
  //         list.options
  //           .filter(({ option_key: optionKey }) =>
  //             optionGroup.groups.some(
  //               ({ option_key: groupKey }) =>
  //                 groupKey === optionKey && !question.hideOptionsSet.has(groupKey)
  //             )
  //           )
  //           .map(({ option_key: optionKey }) => optionKey)
  //       );
  //       if (options.length >= min) {
  //         isError = true;
  //         question.error = translatedText.value.PleaseSelectAtLeastOneOptionsInTitleGroup(
  //           min,
  //           title
  //         );
  //       }
  //     }
  //     return isError;
  //   });
  // }
}

export { validateMultiSelectQuestion, validateSelectQuestion };
