"use client";

import { authApi, userApi, type UserResponse } from "./api";

const ACCESS_KEY = "rc_access_token";
const REFRESH_KEY = "rc_refresh_token";

export const tokenStore = {
  getAccess(): string | null {
    if (typeof window === "undefined") return null;
    return localStorage.getItem(ACCESS_KEY);
  },

  getRefresh(): string | null {
    if (typeof window === "undefined") return null;
    return localStorage.getItem(REFRESH_KEY);
  },

  set(access: string, refresh: string) {
    localStorage.setItem(ACCESS_KEY, access);
    localStorage.setItem(REFRESH_KEY, refresh);
  },

  clear() {
    localStorage.removeItem(ACCESS_KEY);
    localStorage.removeItem(REFRESH_KEY);
  },
};

export async function getValidToken(): Promise<string | null> {
  const access = tokenStore.getAccess();
  if (access) return access;

  const refresh = tokenStore.getRefresh();
  if (!refresh) return null;

  try {
    const tokens = await authApi.refresh(refresh);
    tokenStore.set(tokens.access_token, tokens.refresh_token);
    return tokens.access_token;
  } catch {
    tokenStore.clear();
    return null;
  }
}

export async function getCurrentUser(): Promise<UserResponse | null> {
  const token = await getValidToken();
  if (!token) return null;
  try {
    return await userApi.getMe(token);
  } catch {
    return null;
  }
}

export function logout() {
  tokenStore.clear();
  window.location.href = "/login";
}
