<!-- eslint-disable vue/no-v-html -->
<template>
  <div class="chinese-preview">
    <div class="stem">
      <span class="question-number">{{ data.property.question_number }}.</span>
      <span v-html="sanitizeHTML(data.stem)"></span>
    </div>
    <div v-if="isEnable(data.property.is_enable_description)" class="description">{{ data.description }}</div>

    <!-- 笔画学习 -->
    <div :class="['words-box', 'words-box-' + data.property.learn_type]">
      <div v-for="(item, index) in data.option_list" :key="index" :class="['words-item']">
        <template v-if="item.content && item.content.trim() && item.strokes">
          <div
            v-if="data.property.learn_type !== 'dictation'"
            class="words-top"
            :style="{
              width: 64 * (writer_number + 1 > writer_number_yuan ? writer_number_yuan : writer_number + 1) + 'px',
            }"
          >
            <div class="words-left">
              <AudioPlay :file-id="item.audio_file_id" theme-color="gray" />
              <span class="pinyin">{{ item.pinyin }}</span>
            </div>
            <p class="words-right">{{ item.definition }}</p>
            <p class="words-right">{{ item.collocation }}</p>
          </div>
          <div v-if="data.property.learn_type === 'paint'" class="card-box">
            <!-- 描红 -->
            <Strockplayredline
              :play-storkes="true"
              :book-text="item.content"
              :target-div="'pre' + item.content + index"
              :book-strokes="item.strokes"
              :class="['strock-chinese', 'border-right-none']"
            />
            <Strockred
              v-for="itemI in writer_number"
              :key="itemI + data.property.learn_type"
              :book-text="item.content"
              :hanzi-color="hanzi_color"
              :reset="true"
              :target-div="'write-praT' + item.content + itemI + Math.random().toString(36).substring(2, 10)"
              :book-strokes="item.strokes"
              :class="[
                'strock-chinese',
                (itemI + 1) % writer_number_yuan !== 0 && itemI !== writer_number ? 'border-right-none' : '',
              ]"
            />
            <!-- <div
              v-for="(items, indexs) in item.imgArr"
              :key="indexs"
              :class="['strockplay-newWord border-left-none']"
              @click="freeWrite(items, index, indexs)"
            >
              <SvgIcon icon-class="hanzi-writer-bg" class="character-target-bg" />
              <img
                v-if="!play_status && items && items.strokes_image_url"
                class="hanzi-writer-img"
                :src="items.strokes_image_url"
                alt=""
              />
            </div> -->
          </div>
          <div v-else-if="data.property.learn_type === 'write'" class="card-box">
            <!-- 书写 -->
            <Strockplayredline
              :play-storkes="true"
              :book-text="item.content"
              :target-div="'pre' + item.content + index"
              :book-strokes="item.strokes"
              :class="['strock-chinese']"
            />
            <div v-for="(items, indexs) in item.imgArr" :key="indexs" class="con-box">
              <div
                :class="['strockplay-newWord', (indexs + 1) % writer_number_yuan !== 0 ? 'border-left-none' : '']"
                @click="freeWrite(items, index, indexs)"
              >
                <SvgIcon icon-class="hanzi-writer-bg" class="character-target-bg" />
                <img
                  v-if="!play_status && items && items.strokes_image_url"
                  class="hanzi-writer-img"
                  :src="items.strokes_image_url"
                  alt=""
                />
              </div>
            </div>
          </div>
        </template>
        <div v-if="data.property.learn_type === 'dictation'" class="card-box">
          <div class="words-info">
            <span>{{ computeOptionMethods[data.option_number_show_mode](index) }} </span>
            <span class="pinyin">{{ item.pinyin }}</span>
            <AudioPlay :file-id="item.audio_file_id" theme-color="white" />
          </div>
          <div class="words-dic-box">
            <div v-for="(itemc, indexc) in item.imgArr" :key="indexc" class="words-dic-item">
              <span class="pinyin">{{ item.pinyin_arr[indexc].pinyin_item }}</span>
              <div :class="['strockplay-newWord']" @click="freeWrite(itemc, index, indexc)">
                <SvgIcon icon-class="hanzi-writer-bg" class="character-target-bg" />
                <img
                  v-if="!play_status && itemc && itemc.strokes_image_url"
                  class="hanzi-writer-img"
                  :src="itemc.strokes_image_url"
                  alt=""
                />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div v-if="if_free_show" class="practiceBox practice-box-strock">
      <FreewriteLettle
        ref="freePaint"
        :current-tree-i-d="'1234456'"
        :current-hz="current_hz"
        :curren-hz-data="current_hz_data"
        :row-index="active_index"
        :col-index="active_col_index"
        @closeIfFreeShow="closeIfFreeShow"
        @changePraShow="changePraShow"
        @changeCurQue="changeCurQue"
        @deleteWriteRecord="deleteWriteRecord"
      />
    </div>
  </div>
</template>

<script>
import { computeOptionMethods } from '@/views/exercise_questions/data/common';
import PreviewMixin from './components/PreviewMixin';
import Strockplayredline from './components/common/Strockplayredline.vue';
import Strockred from './components/common/Strockred.vue';
import FreewriteLettle from './components/common/FreewriteLettle.vue';
import { GetStaticResources } from '@/api/app';

export default {
  name: 'ChinesePreview',
  components: {
    Strockplayredline,
    Strockred,
    FreewriteLettle,
  },
  mixins: [PreviewMixin],
  data() {
    return {
      computeOptionMethods,
      hanzi_color: '#404040', // 描红汉字底色
      writer_number_yuan: 19,
      writer_number: null, // 书写个数
      answer_list: {
        write_model: {},
      }, // 用户答题数据
      if_free_show: false,
      free_img: [],
      active_index: null,
      active_col_index: null,
      current_hz: '', // 当前汉字
      current_hz_data: null, // 当前汉字数据
      play_status: false, // 播放状态
      hz_data: [
        '你',
        '最',
        '近',
        '怎',
        '么',
        '样',
        '我',
        '很',
        '好',
        '再',
        '见',
        '吃',
        '饭',
        '天',
        '启',
        '扫',
        '描',
        '以',
        '平',
        '太',
        '效',
        '国',
        '是',
        '称',
        '需',
        '值',
        '复',
        '包',
        '头',
        '条',
        '够',
        '关',
        '放',
        '发',
        '补',
        '快',
        '素',
      ],
    };
  },
  watch: {
    'data.property.learn_type': {
      handler(val, oldVal) {
        if (val !== oldVal) {
          this.handleData();
        }
      },
      deep: true,
    },
  },
  created() {
    this.handleData();
  },
  mounted() {},
  methods: {
    // 初始化数据
    handleData() {
      // if (
      //   document.getElementsByClassName('preview-content') &&
      //   document.getElementsByClassName('preview-content')[0] &&
      //   !this.writer_number
      // ) {
      //   this.writer_number_yuan =
      //     Math.floor((document.getElementsByClassName('preview-content')[0].clientWidth - 128) / 64) - 1;
      // }
      // if (this.data.property.learn_type === 'paint') {
      //   this.writer_number = this.writer_number_yuan - 5;
      // } else {
      //   this.writer_number = this.writer_number_yuan;
      // }
      this.writer_number_yuan = Math.floor(
        (document.getElementsByClassName('preview-content')[0].clientWidth - 128) / 64,
      );
      this.writer_number = this.data.property.tian_number ? Number(this.data.property.tian_number) : 8;
      this.data.option_list.forEach((item, index) => {
        let arr = [];
        if (this.data.property.learn_type === 'dictation') {
          item.pinyin_arr = [];
          let pinyin_arr = item.pinyin.trim().split(' ');
          pinyin_arr.forEach((itemp) => {
            let obj = {
              pinyin_item: itemp,
            };
            arr.push(null);
            item.pinyin_arr.push(obj);
          });
          item.imgArr = arr;
          this.answer_list.write_model[this.hz_data[index]] = arr;
        } else if (item.content.trim()) {
          let MethodName = 'hz_resource_manager-GetHZStrokesContent';
          let data = {
            hz: item.content.trim(),
          };
          GetStaticResources(MethodName, data).then((res) => {
            this.$set(item, 'strokes', res);
          });

          for (let i = 0; i < this.writer_number; i++) {
            arr.push(null);
          }
          item.imgArr = arr;
          this.answer_list.write_model[item.content] = arr;
        }
      });
    },
    changePraShow() {
      this.if_free_show = false;
    },
    closeIfFreeShow(data, rowIndex, colIndex) {
      this.data.option_list[rowIndex].imgArr[colIndex] = data;
      this.if_free_show = false;
      this.freeWrite(data, rowIndex, colIndex);
      this.$forceUpdate();
    },
    freeWrite(imgUrl, index, indexs) {
      this.if_free_show = true;
      this.active_index = index;
      this.active_col_index = indexs;
      if (this.data.property.learn_type === 'dictation') {
        this.current_hz = this.hz_data[index];
      } else {
        this.current_hz = this.data.option_list[index].content;
      }
      this.current_hz_data = imgUrl;
    },
    // 删除记录
    deleteWriteRecord(rowIndex, colIndex, current_hz) {
      this.$set(this.data.option_list[rowIndex].imgArr, colIndex, {});
      let answer = {
        hz: current_hz,
        strokes_content: '',
        strokes_image_url: '',
      };
      this.changeCurQue(answer, colIndex);
      this.current_hz_data = null;
      this.$forceUpdate();
    },
    changeCurQue(answer, colIndex) {
      if (answer) {
        let write_model = this.answer_list.write_model;
        let hz = answer.hz;
        write_model[hz][colIndex] = answer;
      }
    },
  },
};
</script>

<style lang="scss" scoped>
@use '@/styles/mixin.scss' as *;

.chinese-preview {
  @include preview;

  .words-box {
    .words-item {
      // display: flex;
      // flex-wrap: wrap;
      min-width: 64px;
      margin-bottom: 24px;
    }

    .words-top {
      display: flex;
      width: 100%;
      min-height: 30px;
      border: 1px solid #e81b1b;

      .words-left {
        box-sizing: border-box;
        display: flex;
        column-gap: 4px;
        align-items: center;
        justify-content: center;
        width: 64px;
        margin-right: 12px;
        border-right: 1px solid #e81b1b;
      }

      .words-right {
        padding: 8px 4px;
        margin: 0;
        font-size: 14px;
        line-height: 14px;
        color: #000;
      }
    }

    .audio-wrapper {
      height: 16px;

      :deep .audio-play {
        width: 16px;
        height: 16px;
        color: #000;
        background-color: initial;
      }

      :deep .audio-play.not-url {
        color: #a1a1a1;
      }

      :deep .voice-play {
        width: 16px;
        height: 16px;
      }
    }

    .words-info {
      display: flex;
      column-gap: 4px;
      align-items: center;
      justify-content: center;
      width: max-content;
      padding: 5px 16px;
      margin: 0 auto 8px;
      font-size: 14px;
      line-height: 22px;
      color: #fff;
      background: #165dff;
      border-radius: 20px;

      .pinyin {
        font-size: 14px;
        color: #fff;
      }

      .audio-wrapper {
        :deep .audio-play {
          color: #fff;
        }

        :deep .audio-play.not-url {
          color: #a1a1a1;
        }
      }
    }

    .card-box {
      display: flex;
      flex-wrap: wrap;
    }

    .pinyin {
      font-family: 'League';
      font-size: 12px;
      font-weight: 500;
      color: #000;
    }

    .strock-chinese {
      border: 1px solid #e81b1b;
      border-top: none;
    }

    .strockplay-newWord {
      position: relative;
      box-sizing: border-box;
      flex-shrink: 0;
      width: 64px;
      height: 64px;
      border: 1px solid #e81b1b;
      border-top: none;

      .character-target-bg,
      .hanzi-writer-img {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        color: #dedede;
      }

      .hanzi-writer-img {
        z-index: 1;
      }
    }

    .border-left-none {
      border-left: none;
    }

    .border-right-none {
      border-right: none;
    }

    &-learn {
      display: flex;
      column-gap: 24px;

      .words-item {
        display: block;
      }
    }
  }

  .words-box-dictation {
    display: flex;
    flex-wrap: wrap;
    column-gap: 24px;

    .card-box {
      display: block;
    }

    .words-dic-box {
      display: flex;
      column-gap: 6px;
      width: max-content;
      margin: 0 auto;
    }

    .words-dic-item {
      text-align: center;

      .pinyin {
        line-height: 30px;
      }
    }
  }

  .words-dic-item {
    .strockplay-newWord {
      border-top: 1px solid #e81b1b;
    }
  }

  .practiceBox {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 101;
    box-sizing: border-box;
    width: 100%;
    height: 100vh;
    overflow: hidden;
    overflow-y: auto;
    background: rgba(0, 0, 0, 19%);

    &.practice-box-strock {
      display: flex;
      align-items: center;
      justify-content: center;
      padding-top: 0;
    }
  }
}
</style>
