import { computed, defineComponent, onMounted, reactive, ref } from 'vue';
import styles from './index.module.less';
import {
  NButton,
  NDataTable,
  NForm,
  NFormItem,
  NImage,
  NModal,
  NProgress,
  NSpace
} from 'naive-ui';
import SearchInput from '@/components/searchInput';
import CSelect from '@/components/CSelect';
import Pagination from '@/components/pagination';
import { api_trainingDetail, api_trainingStudentList } from '../api';
import { onBeforeRouteLeave, useRoute } from 'vue-router';
import CBreadcrumb from '/src/components/CBreadcrumb';
import defultHeade from '@/components/layout/images/teacherIcon.png';
import { trainingStatusArray } from '@/utils/searchArray';
import dayjs from 'dayjs';
import TheEmpty from '/src/components/TheEmpty';
import TrainingDetails from '../../classList/modals/TrainingDetails';
import { evaluateDifficult } from '/src/utils/contants';
import { modalClickMask } from '/src/state';
export default defineComponent({
  name: 'homewrok-record-detail',
  setup() {
    const route = useRoute();
    const state = reactive({
      searchForm: {
        keyword: '',
        vipFlag: null as any,
        trainingStatus: '' as any,
        classGroupId: '' as any
      },
      loading: false,
      pagination: {
        page: 1,
        rows: 10,
        pageTotal: 4
      },
      studentClassList: [] as any,
      tableList: [] as any,
      workInfo: {} as any,
      detailVisiable: false,
      activeRow: null as any,
      index: 0
    });
    const TrainingDetailsRef = ref();
    const routerList = ref([
      { name: '作业', path: '/homework-record' },
      { name: route.query.name, path: '/homework-record-detail' }
    ] as any);

    const search = () => {
      state.pagination.page = 1;
      getList();
    };

    const onReset = () => {
      state.searchForm = {
        keyword: '',
        vipFlag: null,
        trainingStatus: '' as any,
        classGroupId: '' as any
      };
      search();
    };
    const getList = async (type?: string, page?: number) => {
      state.loading = true;
      try {
        const res = await api_trainingStudentList({
          trainingId: route.query.id,
          ...state.searchForm,
          ...state.pagination,
          page: page || state.pagination.page
        });
        state.tableList = res.data.rows;
        state.pagination.pageTotal = res.data.total;
        state.pagination.page = res.data.current;
        state.loading = false;
        if (type === 'next') {
          state.index = 0;
          goToNext();
        } else if (type === 'prev') {
          state.index = state.tableList.length + 1;
          gotoPre();
        }
      } catch (e) {
        state.loading = false;
        console.log(e);
      }
    };
    const getWorkInfo = async () => {
      try {
        const res = await api_trainingDetail({ id: route.query.id });
        const result = res.data || {};
        // state.workInfo
        let pTitle = '';
        let eTitle = '';
        if (
          result.studentLessonTrainingDetails &&
          result.studentLessonTrainingDetails.length > 0
        ) {
          result.studentLessonTrainingDetails.forEach((child: any) => {
            // if (child.trainingType === 'PRACTICE' && child.musicName) {
            //   pTitle += pTitle ? '、' + child.musicName : child.musicName;
            // }
            // if (child.trainingType === 'EVALUATION' && child.musicName) {
            //   eTitle += eTitle ? '、' + child.musicName : child.musicName;
            // }
            const trainingContent = child.trainingContent
              ? JSON.parse(child.trainingContent)
              : null;

            if (child.trainingType === 'PRACTICE' && child.musicName) {
              pTitle += '《' + child.musicName + '》';

              if (trainingContent) {
                const tempList = [
                  `${trainingContent.practiceChapterBegin}-${trainingContent.practiceChapterEnd}小节`,
                  `速度${trainingContent.practiceSpeed || 0}`,
                  `${trainingContent.trainingTimes}分钟`
                ];
                pTitle += tempList.join(' | ') + '；';
              }
            }
            if (child.trainingType === 'EVALUATION' && child.musicName) {
              eTitle += '《' + child.musicName + '》';
              if (trainingContent) {
                const tempList = [
                  `${evaluateDifficult[trainingContent.evaluateDifficult]}`,
                  `${trainingContent.practiceChapterBegin || 0}-${
                    trainingContent.practiceChapterEnd || 0
                  }小节`,
                  `速度${trainingContent.evaluateSpeed || 0}`,
                  `${trainingContent.trainingTimes}分达标`
                ];
                eTitle += tempList.join(' | ') + '；';
              }
            }
          });
        }
        result.pTitle = pTitle;
        result.eTitle = eTitle;
        state.workInfo = result;

        // 班级列表
        const classList = result.studentClassGroup || [];
        classList.forEach((item: any) => {
          state.studentClassList.push({
            label: item.name,
            value: item.id
          });
        });
      } catch (e) {
        console.log(e);
      }
    };

    const lookDetail = (row: any, index: number) => {
      console.log(index, 'index');
      state.index = index + 1;
      state.activeRow = row;
      state.detailVisiable = true;
    };
    onMounted(() => {
      getWorkInfo();
      getList();
    });
    const columns = () => {
      return [
        {
          title: '学生姓名',
          key: 'studentName'
        },
        {
          title: '最后提交时间',
          key: 'submitTime',
          render(row: any) {
            return row.submitTime
              ? dayjs(row.submitTime).format('YYYY-MM-DD')
              : '--';
          }
        },
        {
          title: '所属班级',
          key: 'classGroupName'
        },
        {
          title: '作业状态',
          key: 'trainingStatus',
          render(row: any) {
            return (
              <div>
                {row.trainingStatus == 'UNSUBMITTED' ? (
                  <p class={styles.nosub}>未提交</p>
                ) : null}
                {row.trainingStatus == 'SUBMITTED' ? (
                  <p class={styles.ison}>未达标</p>
                ) : null}
                {row.trainingStatus == 'TARGET' ? (
                  <p class={styles.isok}>达标</p>
                ) : null}
              </div>
            );
          }
        },
        {
          title: '是否会员',
          key: 'vipFlag',
          render(row: any) {
            return row.vipFlag ? '是' : '否';
          }
        },
        {
          title: '操作',
          key: 'id',
          render(row: any, index: number) {
            return (
              <NButton
                text
                type="primary"
                onClick={() => {
                  lookDetail(row, index);
                }}>
                详情
              </NButton>
            );
          }
        }
      ];
    };

    const goToNext = () => {
      if (state.index >= state.tableList.length) {
        getList('next', state.pagination.page + 1);
      } else {
        ++state.index;
        state.activeRow = state.tableList[state.index - 1];
        TrainingDetailsRef.value.getTrainingDetail(
          state.activeRow.studentLessonTrainingId
        );
      }
    };
    const gotoPre = () => {
      if (state.index === 1 && state.pagination.page !== 1) {
        getList('prev', state.pagination.page - 1);
      } else {
        --state.index;
        state.activeRow = state.tableList[state.index - 1];
        TrainingDetailsRef.value.getTrainingDetail(
          state.activeRow.studentLessonTrainingId
        );
      }
    };

    const currentStudentIndex = computed(() => {
      return state.index + (state.pagination.page - 1) * state.pagination.rows;
    });

    // 定义一个变量来控制守卫是否生效
    const isBeforeEachActive = ref(false);
    onBeforeRouteLeave((to, from, next) => {
      if (
        isBeforeEachActive.value &&
        route.query.times &&
        to.path === '/data-module'
      ) {
        to.query = {
          times: route.query.times
        };
      }

      next();
    });

    const onBack = () => {
      isBeforeEachActive.value = true;
    };
    return () => (
      <div>
        <CBreadcrumb list={routerList.value} onBack={onBack}></CBreadcrumb>
        <div class={styles.listWrap}>
          <div class={styles.teacherSection}>
            <div class={styles.teacherList}>
              <div class={styles.tTemp}>
                <div class={styles.teacherHeader}>
                  <div class={styles.teacherHeaderBorder}>
                    <NImage
                      class={styles.teacherHeaderImg}
                      src={state.workInfo.teacherAvatar || defultHeade}
                      previewDisabled></NImage>
                  </div>
                </div>
                <div class={styles.workafterInfo}>
                  <h4>{state.workInfo.teacherName}</h4>
                  {state.workInfo.createTime && (
                    <p>
                      布置时间：
                      {state.workInfo.createTime &&
                        dayjs(state.workInfo.createTime).format(
                          'YYYY-MM-DD HH:mm'
                        )}{' '}
                      |{' '}
                      <span>
                        截止时间：
                        {state.workInfo.expireDate &&
                          dayjs(state.workInfo.expireDate).format('YYYY-MM-DD')}
                      </span>
                    </p>
                  )}
                </div>
              </div>
              <div class={styles.infos}>
                <div class={styles.homeTitle}>{state.workInfo.name}</div>
                <div class={[styles.homeContent, styles.homeworkText]}>
                  <div class={styles.pSection}>
                    {state.workInfo.pTitle && (
                      <p class={[styles.text, styles.p1]}>
                        <div>
                          <span>练习曲目:</span>
                          <p>{state.workInfo.pTitle}</p>
                        </div>
                      </p>
                    )}
                    {state.workInfo.eTitle && (
                      <p class={[styles.text, styles.p2]}>
                        <div>
                          <span>评测曲目:</span>
                          <p>{state.workInfo.eTitle}</p>
                        </div>
                      </p>
                    )}
                  </div>
                </div>
              </div>
            </div>
            <div>
              <div class={styles.stitcTitle}>作业完成情况</div>
              <div class={styles.stitcConent}>
                <NSpace size={[38, 0]}>
                  <NProgress
                    percentage={state.workInfo.trainingRate || 0}
                    // percentage={20}
                    offset-degree={180}
                    type="circle"
                    strokeWidth={6}
                    rail-color={'EDEFFA'}
                    color={'#64A5FF'}>
                    <div class={styles.contentRect}>
                      <div class={styles.nums}>
                        {state.workInfo.trainingNum || 0}
                        <i>/</i>
                        {state.workInfo.expectNum || 0}
                        <span>人</span>
                      </div>
                      <div class={styles.text}>已提交</div>
                    </div>
                  </NProgress>
                  <NProgress
                    percentage={state.workInfo.trainingRate || 0}
                    offset-degree={180}
                    strokeWidth={6}
                    type="circle"
                    rail-color={'EDEFFA'}
                    color={'#64A5FF'}>
                    <div class={styles.contentRect}>
                      <div class={styles.nums}>
                        {state.workInfo.trainingRate || 0}%
                      </div>
                      <div class={styles.text}>提交率</div>
                    </div>
                  </NProgress>
                  <NProgress
                    percentage={state.workInfo.qualifiedRate || 0}
                    offset-degree={180}
                    strokeWidth={6}
                    type="circle"
                    rail-color={'EDEFFA'}
                    color={'#40CEAE'}>
                    <div class={styles.contentRect}>
                      <div class={styles.nums}>
                        {state.workInfo.standardNum || 0}
                        <span>人</span>
                      </div>
                      <div class={styles.text}>达标人数</div>
                    </div>
                  </NProgress>
                  <NProgress
                    percentage={state.workInfo.qualifiedRate || 0}
                    offset-degree={180}
                    strokeWidth={6}
                    type="circle"
                    rail-color={'EDEFFA'}
                    color={'#40CEAE'}>
                    <div class={styles.contentRect}>
                      <div class={styles.nums}>
                        {state.workInfo.qualifiedRate || 0}%
                      </div>
                      <div class={styles.text}>达标率</div>
                    </div>
                  </NProgress>
                </NSpace>
              </div>
            </div>
          </div>
          <div class={styles.searchList}>
            <NForm label-placement="left" inline>
              <NFormItem>
                <SearchInput
                  {...{ placeholder: '请输入学生姓名' }}
                  class={styles.searchInput}
                  searchWord={state.searchForm.keyword}
                  onChangeValue={(val: string) =>
                    (state.searchForm.keyword = val)
                  }></SearchInput>
              </NFormItem>

              <NFormItem>
                <CSelect
                  {...({
                    options: [
                      {
                        label: '全部班级',
                        value: ''
                      },
                      ...state.studentClassList
                    ],
                    placeholder: '全部班级',
                    clearable: true,
                    inline: true
                  } as any)}
                  v-model:value={state.searchForm.classGroupId}></CSelect>
              </NFormItem>
              <NFormItem>
                <CSelect
                  {...({
                    options: [
                      {
                        label: '全部状态',
                        value: ''
                      },
                      ...trainingStatusArray
                    ],
                    placeholder: '作业状态',
                    clearable: true,
                    inline: true
                  } as any)}
                  v-model:value={state.searchForm.trainingStatus}></CSelect>
              </NFormItem>

              <NFormItem>
                <CSelect
                  {...({
                    options: [
                      { label: '是', value: true },
                      { label: '否', value: false }
                    ],
                    placeholder: '是否会员',
                    clearable: true,
                    inline: true
                  } as any)}
                  v-model:value={state.searchForm.vipFlag}></CSelect>
              </NFormItem>

              <NFormItem>
                <NSpace justify="end">
                  <NButton type="primary" class="searchBtn" onClick={search}>
                    搜索
                  </NButton>
                  <NButton
                    type="primary"
                    ghost
                    class="resetBtn"
                    onClick={onReset}>
                    重置
                  </NButton>
                </NSpace>
              </NFormItem>
            </NForm>
          </div>
          <div class={styles.tableWrap}>
            <NDataTable
              v-slots={{
                empty: () => <TheEmpty></TheEmpty>
              }}
              class={styles.classTable}
              loading={state.loading}
              columns={columns()}
              data={state.tableList}></NDataTable>
            <Pagination
              v-model:page={state.pagination.page}
              v-model:pageSize={state.pagination.rows}
              v-model:pageTotal={state.pagination.pageTotal}
              onList={getList}
              // sync
            />
          </div>
        </div>
        <NModal
          maskClosable={modalClickMask}
          v-model:show={state.detailVisiable}
          preset="card"
          class={['modalTitle background', styles.wordDetailModel]}
          title={'作业详情'}>
          <TrainingDetails
            onNext={() => goToNext()}
            onPre={() => gotoPre()}
            ref={TrainingDetailsRef}
            onClose={() => (state.detailVisiable = false)}
            total={state.pagination.pageTotal}
            current={currentStudentIndex.value}
            activeRow={state.activeRow}></TrainingDetails>
        </NModal>
      </div>
    );
  }
});
