import {
  PropType,
  computed,
  defineComponent,
  nextTick,
  onMounted,
  reactive,
  ref
} from 'vue';
import styles from './index.module.less';
import {
  NButton,
  NCarousel,
  NCarouselItem,
  NForm,
  NFormItem,
  NImage,
  NPopselect,
  NSpace
} from 'naive-ui';
import TheSearch from '/src/components/TheSearch';
import iconSlideRight from '/src/views/prepare-lessons/images/icon-slide-right.png';
export default defineComponent({
  name: 'search-group',
  props: {
    categoryChildList: {
      type: Array as PropType<any>,
      default: () => []
    },
    wikiCategoryId: {
      type: String,
      default: ''
    }
  },
  emits: ['search', 'add'],
  expose: ['init'],
  setup(props, { emit }) {
    // const catchStore = useCatchStore();
    const forms = reactive({
      keyword: '',
      wikiCategoryId: props.wikiCategoryId || '',
      wikiCategoryIdChild: '',
      childIds: [] as any,
      currentIndex: 0
    });
    const carouselRef = ref();

    const onSearch = () => {
      emit('search', forms);
    };

    const selectChildObj = (item: any, index: number) => {
      const obj: any = {};
      item?.forEach((child: any) => {
        if (child.id === forms.wikiCategoryIdChild) {
          obj.selected = true;
          obj.name = child.name;
        }
      });
      return obj;
    };

    const childList = computed(() => {
      const categoryChildList = props.categoryChildList || [];
      const child = categoryChildList.find(
        (item: any) => item.id === forms.wikiCategoryId
      );
      if (child && child.childrenList.length) {
        const temps: any = [];
        child.childrenList.forEach((c: any) => {
          const i = c.childrenList;
          const childTemp: any = [];
          // const i = c.childrenList;
          if (i && i.length > 0) {
            childTemp.push({
              label: '全部',
              value: c.id,
              name: c.name,
              id: c.id
            });
            i.forEach((j: any) => {
              // j.label = j.name;
              // j.value = j.id;
              childTemp.push({
                label: j.name,
                value: j.id,
                name: j.name,
                id: j.id
              });
            });
          }

          temps.push({
            ...c,
            childrenList: childTemp
          });
        });
        return (
          [
            {
              label: '全部',
              value: '',
              id: '',
              name: '全部',
              childrenList: []
            },
            ...temps
          ]
        );
      }
      return [];
    });

    const state = reactive({
      showSlide: false
    });
    const onChangeSlide = (type: string) => {
      if (type === 'left') {
        carouselRef.value?.prev();
      } else if (type === 'right') {
        carouselRef.value?.next();
      }
    };

    onMounted(() => {
      nextTick(() => {
        // 最外层宽度
        const carouselContainer = document.querySelector('.carouselContainer');
        const carouselContainerWidth =
          (carouselContainer &&
            carouselContainer.getBoundingClientRect().width) ||
          0;
        const slideDoms = document.querySelectorAll('.n-carousel__slide');
        let slideWidth = 0;
        slideDoms.forEach(doom => {
          const rect = doom.getBoundingClientRect();
          slideWidth += rect.width;
        });
        if (slideWidth >= carouselContainerWidth) {
          state.showSlide = true;
        }
      });
    });

    return () => (
      <div class={styles.searchGroup}>
        <div
          class={[
            styles.searchCatatory,
            childList.value.length > 0 ? styles.border : ''
          ]}>
          <NSpace size="small" class={styles.btnType}>
            {props.categoryChildList.length > 0 ? (
              <NButton
                type={
                  forms.wikiCategoryId === props.wikiCategoryId
                    ? 'primary'
                    : 'default'
                }
                secondary={
                  forms.wikiCategoryId === props.wikiCategoryId ? false : true
                }
                round
                size="small"
                focusable={false}
                onClick={() => {
                  forms.wikiCategoryId = props.wikiCategoryId;
                  forms.wikiCategoryIdChild = '';
                  onSearch();
                }}>
                全部
              </NButton>
            ) : (
              <span></span>
            )}

            <div class={[styles.carouselGroup]}>
              <NCarousel
                ref={carouselRef}
                slidesPerView={'auto'}
                loop={false}
                class={[styles.carouselContainer, 'carouselContainer']}
                showDots={false}
                // spaceBetween={20}
                draggable={state.showSlide}
                currentIndex={forms.currentIndex}
                onUpdate:currentIndex={(val: any) => {
                  //
                  // if (val > forms.maxIndex) {
                  //   forms.maxIndex = val;
                  //   carouselRef.value?.to(0);
                  // }
                  forms.currentIndex = val;
                }}>
                {props.categoryChildList.map((item: any) => (
                  <NCarouselItem>
                    <NButton
                      type={
                        forms.wikiCategoryId === item.id ? 'primary' : 'default'
                      }
                      secondary={
                        forms.wikiCategoryId === item.id ? false : true
                      }
                      round
                      size="small"
                      focusable={false}
                      onClick={() => {
                        forms.wikiCategoryId = item.id;
                        onSearch();
                      }}>
                      {item.name}
                    </NButton>
                  </NCarouselItem>
                ))}
              </NCarousel>

              {state.showSlide && (
                <NSpace class={styles.swipeControll}>
                  <div onClick={() => onChangeSlide('left')}>
                    <NImage
                      previewDisabled
                      class={[
                        styles.leftIcon
                        // forms.currentIndex === 0 && styles.disabled
                      ]}
                      src={iconSlideRight}
                    />
                  </div>
                  <div onClick={() => onChangeSlide('right')}>
                    <NImage
                      // class={
                      //   // forms.currentIndex == forms.openTableList.length - 4 &&
                      //   styles.disabled
                      // }
                      previewDisabled
                      src={iconSlideRight}
                    />
                  </div>
                </NSpace>
              )}
            </div>
          </NSpace>
          <TheSearch
            class={styles.inputSearch}
            placeholder="请输入曲目名称"
            round
            value={forms.keyword}
            onUpdate:value={(val: string) => {
              forms.keyword = val;
            }}
            onSearch={(val: string) => {
              forms.keyword = val;
              onSearch();
            }}
          />
        </div>

        {childList.value.length > 0 && (
          <div class={[styles.collapseWrap]}>
            <NSpace class={[styles.spaceSection]}>
              {childList.value.map((music: any, index: number) => (
                <>
                  {music.childrenList.length > 0 ? (
                    <NPopselect
                      options={music.childrenList}
                      trigger="hover"
                      v-model:value={forms.wikiCategoryIdChild}
                      onUpdate:value={() => {
                        onSearch();
                      }}
                      key={music.id}
                      class={styles.popSelect}>
                      <span
                        class={[
                          styles.textBtn,
                          selectChildObj(music.childrenList, index).selected &&
                            styles.textBtnActive
                        ]}>
                        {selectChildObj(music.childrenList, index).name ||
                          music.name}
                        <i class={styles.iconArrow}></i>
                      </span>
                    </NPopselect>
                  ) : (
                    <span
                      class={[
                        styles.textBtn,
                        forms.wikiCategoryIdChild === music.id &&
                          styles.textBtnActive
                      ]}
                      onClick={() => {
                        forms.wikiCategoryIdChild = music.id;
                        onSearch();
                      }}>
                      {music.name}
                    </span>
                  )}
                </>
              ))}
            </NSpace>
          </div>
        )}
      </div>
    );
  }
});
