import { getDataSet, toNumber } from "@/utils/util";

Component({
  options: { multipleSlots: true },
  /**
   * 组件的属性列表
   */
  properties: {
    curr_page: {
      type: Number,
      value: 1,
      observer() {
        this.page();
      },
    },
    total: {
      type: Number,
      value: 0,
      observer() {
        this.page();
      },
    },
    page_count: {
      type: Number,
      value: 20,
      observer() {
        this.page();
      },
    },
  },

  /**
   * 组件的初始数据
   */
  data: {
    pages: [] as number[],
    totalPage: 0,
    open: false,
    pickerPages: [] as any[],
  },

  /**
   * 组件的方法列表
   */
  methods: {
    page() {
      const totalPage = Math.ceil(
        toNumber(this.data.total) / toNumber(this.data.page_count)
      );
      const showPageNum = 3;

      // 计算显示的页码范围
      let startPage = Math.max(
        1,
        toNumber(this.data.curr_page) - Math.floor(showPageNum / 2)
      );
      let endPage = Math.min(totalPage, startPage + showPageNum - 1);

      // 调整起始页码，确保显示的页码数量不超过最大值
      if (endPage - startPage + 1 < showPageNum) {
        startPage = Math.max(1, endPage - showPageNum + 1);
      }

      // 生成页码数组
      const pages = [];
      for (let i = startPage; i <= endPage; i++) {
        pages.push(i);
      }

      this.setData({ pages, totalPage });
    },
    pageChange(e: any) {
      let curr_page = getDataSet(e).page;
      // if (curr_page == this.data.curr_page) {
      //   return;
      // }
      if (curr_page == "prev") {
        curr_page = this.data.curr_page - 1;
      } else if (curr_page == "next") {
        curr_page = this.data.curr_page + 1;
      }
      this.triggerEvent("change", { curr_page });
    },
    pageSelect() {
      this.setData({
        open: true,
        pickerPages: Array.from({ length: this.data.totalPage }, (_, i) => ({
          value: i + 1,
          label: `第 ${i + 1} 页`,
        })),
      });
    },
    onConfirm(e: any) {
      const curr_page = e.detail.value[0];
      // if (curr_page == this.data.curr_page) {
      //   return;
      // }
      this.triggerEvent("change", { curr_page: curr_page });
    },
  },
});

