<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 productTypeOptions"
            :key="type.id"
            :label="type.name"
            :value="type.id"
          />
        </el-select>
        <el-select
          v-model="selectedProduct"
          placeholder="选择系列产品"
          clearable
        >
          <el-option
            v-for="product in productOptions"
            :key="product.id"
            :label="product.name"
            :value="product.id"
          />
        </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 { data, pending, error } = await useQuestionList();

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

  const keyword = ref('');

  const selectedType = ref<number | null>(null);
  const selectedProduct = ref<number | null>(null);

  const productTypeOptions = computed(() => {
    const types: QuestionListProductType[] = [];
    questions.value.forEach((q: QuestionListView) => {
      q.products.forEach((product: QuestionListProduct) => {
        const productType = product.type;
        if (!types.some((p) => p.id === productType.id)) {
          types.push(productType);
        }
      });
    });
    return types;
  });

  const productOptions = computed(() => {
    if (!selectedType.value) return [];
    const products: QuestionListProduct[] = [];
    questions.value.forEach((q: QuestionListView) => {
      q.products.forEach((product: QuestionListProduct) => {
        if (
          product.type.id === selectedType.value &&
          !products.some((p) => p.id === product.id)
        ) {
          products.push(product);
        }
      });
    });
    return products;
  });

  const filteredQuestions = computed(() => {
    return questions.value.filter((question: QuestionListView) => {
      const matchProduct = selectedProduct.value
        ? question.products?.some(
            (product: QuestionListProduct) =>
              product.id === selectedProduct.value
          )
        : selectedType.value
          ? question.products?.some(
              (product: QuestionListProduct) =>
                product.type.id === selectedType.value
            )
          : true;

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

      return matchProduct && matchKeyword;
    });
  });

  watch(selectedType, () => {
    selectedProduct.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>
