<template>
  <div class="page-container">
    <div v-if="pending" class="flex justify-center items-center h-64">
      <el-skeleton :rows="6" animated />
    </div>
    <div v-else>
      <support-tabs model-value="faq" />
      <div class="page-header">
        <h1 class="page-title">{{ $t('navigation.faq') }}</h1>
        <el-breadcrumb class="breadcrumb" separator="/">
          <el-breadcrumb-item class="text-md opacity-50">
            <NuxtLink :to="$localePath('/')">{{
              $t('navigation.home')
            }}</NuxtLink>
          </el-breadcrumb-item>
          <el-breadcrumb-item class="text-md opacity-50">
            <NuxtLink :to="$localePath('/support')">{{
              $t('navigation.support')
            }}</NuxtLink>
          </el-breadcrumb-item>
          <el-breadcrumb-item class="text-md opacity-50">
            <NuxtLink :to="$localePath('/support/faq')">{{
              $t('navigation.faq')
            }}</NuxtLink>
          </el-breadcrumb-item>
        </el-breadcrumb>
      </div>
      <div class="question-category">
        <el-select v-model="selectedType" placeholder="选择产品类型" clearable>
          <el-option
            v-for="type in productionTypeOptions"
            :key="type.documentId"
            :label="type.type"
            :value="type.documentId"
          />
        </el-select>
        <el-select
          v-model="selectedProduction"
          placeholder="选择系列产品"
          clearable
        >
          <el-option
            v-for="production in productionOptions"
            :key="production.documentId"
            :label="production.title"
            :value="production.documentId"
          />
        </el-select>
        <el-input
          v-model="keyword"
          placeholder="输入关键词..."
          clearable
          :prefix-icon="Search"
        />
      </div>
      <div class="page-content">
        <question-list :questions="filteredQuestions" />
      </div>
    </div>
  </div>
</template>

<script setup lang="ts">
  import { Search } from '@element-plus/icons-vue';
  const { find } = useStrapi();
  const { getStrapiLocale } = useLocalizations();
  const strapiLocale = getStrapiLocale();

  const { data, pending, error } = useAsyncData('questions', () =>
    find<Question>('questions', {
      populate: {
        related_productions: {
          populate: ['production_type'],
        },
      },
      locale: strapiLocale,
    })
  );

  const questions = computed(() => data.value?.data ?? null);

  const keyword = ref('');

  const selectedType = ref<string | null>(null);
  const selectedProduction = ref<string | null>(null);

  const productionTypeOptions = computed(() => {
    const types: ProductionType[] = [];
    questions.value.forEach((q: Question) => {
      q.related_productions?.forEach((production: Production) => {
        const productionType = production?.production_type;
        if (!types.some((p) => p.documentId === productionType.documentId)) {
          types.push(productionType);
        }
      });
    });
    return types;
  });

  const productionOptions = computed(() => {
    if (!selectedType.value) return [];
    const productions: Production[] = [];
    questions.value.forEach((question: Question) => {
      question.related_productions.forEach((production: Production) => {
        if (
          production.production_type?.documentId === selectedType.value &&
          !productions.some((p) => p.documentId === production.documentId)
        ) {
          productions.push(production);
        }
      });
    });
    return productions;
  });

  const filteredQuestions = computed(() => {
    return questions.value.filter((question: Question) => {
      const matchProduction = selectedProduction.value
        ? question.related_productions?.some(
            (production: Production) =>
              production.documentId === selectedProduction.value
          )
        : selectedType.value
          ? question.related_productions?.some(
              (production: Production) =>
                production.production_type?.documentId === selectedType.value
            )
          : true;

      const matchKeyword = keyword.value
        ? (question.title && question.title.includes(keyword.value)) ||
          (question.content && question.content.includes(keyword.value))
        : true;

      return matchProduction && matchKeyword;
    });
  });

  watch(selectedType, () => {
    selectedProduction.value = null;
  });

  watch(data, (newVal) => {
    console.log('useAsyncData updated:', newVal);
  });

  watch(error, (value) => {
    if (value) {
      console.error('数据获取失败: ', value);
    }
  });
</script>

<style scoped>
  .page-container {
    max-width: 1200px;
    margin: 0 auto;
  }

  .page-header {
    display: flex;
    padding: 2rem 2rem 0rem;
  }

  .page-title {
    font-size: 2rem;
    font-weight: bold;
    color: var(--el-color-primary);
    margin-bottom: 1rem;
  }

  .breadcrumb {
    margin-left: auto;
  }

  .question-category {
    display: flex;
    padding: 0rem 2rem;
    gap: 4px;
  }

  .page-content {
    padding: 1rem 2rem 2rem;
  }
</style>
