import type { RootState } from "app/store";
import { decodeToken } from "common/decodeToken";
import { DateTime } from "luxon";
import { loadAccessToken } from "./utils";
/**
 * ログイン済みかどうかを判定する
 * @param state RootState
 */
export const isAuthenticatedSelector = (state: RootState): boolean =>
  state.auth.accessToken !== null;

// トークンが有効期限内かどうかを判定する
export const isTokenExpired = (state: RootState): boolean => {
  if (state.auth.accessToken) {
    const token = decodeToken(state.auth.accessToken);
    if (token) {
      const { exp } = token;
      const now = DateTime.local().toSeconds();
      if (now <= exp) {
        return false;
      }
    }
  }
  return true;
};

// 代行操作用のトークンを取得する
export const selectDelegationAccessToken = (state: RootState): string | null =>
  state.auth.delegationAccessToken;

// 代行操作用がなければ通常トークンを取得する
export const selectAccessToken = (state: RootState): string | null =>
  state.auth.delegationAccessToken ?? loadAccessToken();
