// @ts-nocheck
/**
 * 節流函數，用於限制函數的調用頻率
 * @param fn 要進行節流的函數
 * @param delay 兩次調用之間的最小間隔時間
 * @returns 節流後的函數
 */

// #ifndef APP-IOS || APP-ANDROID
export function throttle(fn: (...args: any[]) => void, delay: number) {
  let flag = true; // 標記是否可以執行函數

  return (...args: any[]) => {
    if (flag) {
      flag = false; // 設置為不可執行狀態
      fn(...args); // 執行傳入的函數

      setTimeout(() => {
        flag = true; // 經過指定時間後，設置為可執行狀態
      }, delay);
    }
  };
}
// #endif


// #ifdef APP-IOS || APP-ANDROID
// type Rfun = (...args: any[]) => void
// type Rfun = (...args: any[]) => void

export function throttle<T extends any|null>(
	fn: (args : T) => void, 
	delay: number):(args : T) => void {
	let flag = true; // 標記是否可以執行函數
	
	return (args : T) =>{
		if(flag){
			flag = false;
			fn(args);
			
			setTimeout(()=>{
				flag = true;
			}, delay)
		}
	}
  // return (...args: any[]) => {
  //   // if (flag) {
  //   //   flag = false; // 設置為不可執行狀態
  //   //   fn(...args); // 執行傳入的函數

  //   //   setTimeout(() => {
  //   //     flag = true; // 經過指定時間後，設置為可執行狀態
  //   //   }, delay);
  //   // }
  // };
}

// #endif

// // 示例
// // 定義壹個被節流的函數
// function handleScroll() {
//   console.log("Scroll event handled!");
// }

// // 使用節流函數對 handleScroll 進行節流，間隔時間為 500 毫秒
// const throttledScroll = throttle(handleScroll, 500);

// // 模擬多次調用 handleScroll
// throttledScroll(); // 輸出 "Scroll event handled!"
// throttledScroll(); // 不會輸出
// throttledScroll(); // 不會輸出

// // 經過 500 毫秒後，再次調用 handleScroll
// setTimeout(() => {
//   throttledScroll(); // 輸出 "Scroll event handled!"
// }, 500);