FE Dump
"use client";

import { useRouter } from "next/navigation";
import { useAuthStore } from "../provider/auth-store-provider";
import React, { useCallback, useEffect, useMemo } from "react";
import { restoreAccessToken } from "@/src/features/auth/model/auth";
import {
  HTTPHeaderKey,
  HTTPHeaderValue,
  getAccessToken,
  getAuthorziationValue,
} from "../../api/config";

type FetchFunc = (accessToken: string, ...params: any[]) => Promise<any>;

export default function useAuthFetchList(fetchFunc: FetchFunc) {
  const [accessToken, refreshToken, refresh, reset] = useAuthStore((state) => [
    state.accessToken,
    state.refreshToken,
    state.refresh,
    state.reset,
  ]);
  const router = useRouter();

  useEffect(() => {
    console.log("????");
    if (!accessToken || !refreshToken) {
      console.log("??");
      router.push("/sign-in");
    }
  }, [accessToken, refreshToken, router]);

  console.log("리렌더링");

  const authFetchFunc = async (...params: any[]): Promise<any> => {
    const { code: originalCode, data: originalData } = await fetchFunc(
      accessToken,
      ...params,
    );

    if (originalCode !== 2000) {
      return originalData;
    }

    console.log("access token 만료");

    const restoredResponse = await restoreAccessToken(refreshToken);
    const { headers: restoredHeaders } = restoredResponse;

    if (!restoredResponse.ok) {
      const { code: restoredCode } = await restoredResponse.json();
      if (restoredCode === 2003) {
        console.log("refresh token 만료");
        // reset();
      }
    }

    const authorization = restoredHeaders.get(HTTPHeaderKey.AUTHORIZATION)!;
    const reissuedAccessToken = getAccessToken(authorization);
    console.log("reissuedAccessToken");
    console.log(reissuedAccessToken);
    refresh(reissuedAccessToken);

    return await fetchFunc(reissuedAccessToken, ...params);
  };

  return authFetchFunc;
}

// const authFetchFuncList = useMemo(
//   () =>
//     fetchFuncList.map((func) => async (...params: any[]): Promise<any> => {
//       const { code: originalCode, data: originalData } = await func(
//         accessToken,
//         ...params,
//       );

//       if (originalCode !== 2000) {
//         return originalData;
//       }

//       console.log("access token 만료");

//       const restoredResponse = await restoreAccessToken(refreshToken);
//       const { headers: restoredHeaders } = restoredResponse;

//       if (!restoredResponse.ok) {
//         const { code: restoredCode } = await restoredResponse.json();
//         if (restoredCode === 2003) {
//           console.log("refresh token 만료");
//           // reset();
//         }
//       }

//       const authorization = restoredHeaders.get(HTTPHeaderKey.AUTHORIZATION)!;
//       const reissuedAccessToken = getAccessToken(authorization);
//       console.log("reissuedAccessToken");
//       console.log(reissuedAccessToken);
//       refresh(reissuedAccessToken);

//       return await func(reissuedAccessToken, ...params);
//     }),
//   [accessToken, refreshToken, fetchFuncList, refresh],
// );