import { nextTick, ref, watch } from 'vue';
import { getSurveysPage } from '@/api/home';
import { initialHistory, saveSearchHistory } from '@/views/HomeSearch/components/Recommend/hooks/useRecommend';
import { getSearchInfo } from '@/api/home/search';

// 问卷
const surveys = ref([]);
// 搜索关键词
const keyword = ref<string>('');
// 搜索页面索引, 默认第一页
const index = ref<number>(1);
// 是否到达最后的列表
const lastIndex = ref<boolean>(false);
// 每页的结果个数
const pageCount = ref<number>(5);
// 数组是否是脏数据，当 keyword 变动的时候，数组里面的数据已经不能用了， 需要重新获取
// 这个是判断问卷数据是否重新获取的关键字
const dirty = ref(true);
// loading 状态
const loading = ref(false);
// 模板列表0
const templates = ref([]);
// banners
const banners = ref([]);

async function handleSearch() {
  // loading 状态开启
  // loading.value = true;
  // const params = {
  //   page: index.value,
  //   per_page: pageCount.value,
  //   group_id: 0,
  //   project_name: keyword.value
  // };
  // const res = await getSurveysPage(params);
  // 排除返回出错的异常
  // if (res.data.code !== 0) return;

  // 处理模板搜索和banner的信息
  const info = await getSearchInfo(keyword.value as string);
  templates.value = info.data.data.templates;
  banners.value = info.data.data.banners;

  // 更新问卷信息
  // surveys.value = dirty ? res.data.data : surveys.value.concat(res.data.data);
  surveys.value = info.data.data.my_surveys;


  // 数据更新完成之后，脏数据标记清空
  dirty.value = false;
  // 检查是否是最后一页
  // lastIndex.value = info.data.meta.last_page === index.value;
}

/**
 * 更新 搜索关键字信息
 */
async function updateKeyword(key?: string) {
  // 如果 key 存在，则更新关键字
  if (key) keyword.value = key;

  // 排除边界条件
  if (!keyword.value) {
    // 清空字符内容，重新获取历史，关闭 loading 状态
    keyword.value = '';
    banners.value = [];
    initialHistory()
    loading.value = false;
    return;
  }

  // 重新获取数据
  await handleSearch();
  // 处理后置条件，点击搜索之后，索引更新，
  index.value = 1;
  // 把关键词添加到 localStorage 中
  saveSearchHistory(keyword.value);
  // 打开页面展示状态
  loading.value = true;
}

// 当 keyword 变动的时候，标记脏数据
watch(keyword, async () => {
  dirty.value = true;
  // 重新获取数据
  // await handleSearch();
  // 重置状态
  loading.value = false

  // 清空 banners surveys templates
  banners.value = [];
  surveys.value = [];
  templates.value = [];
});

// 索引变动之后，立刻进行搜索 （没有进行防抖）
watch(index, async () => {
  console.log(`index add`, index.value, loading.value);
  // 当不在 loading 的状态时候再开始获取数据
  await nextTick(() => {
    handleSearch();
  });
});

export {
  keyword,
  updateKeyword,
  lastIndex,
  loading,
  surveys,
  index,
  templates,
  banners
};