"use client";

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

const ACCESS_KEY = "rc_admin_access_token";
const REFRESH_KEY = "rc_admin_refresh_token";

export const adminTokenStore = {
  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 getAdminToken(): Promise<string | null> {
  const access = adminTokenStore.getAccess();
  if (access) return access;

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

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

export async function getAdminUser(): Promise<UserResponse | null> {
  const token = await getAdminToken();
  if (!token) return null;
  try {
    const user = await userApi.getMe(token);
    if (!user.is_admin) {
      adminTokenStore.clear();
      return null;
    }
    return user;
  } catch {
    return null;
  }
}

export function adminLogout() {
  adminTokenStore.clear();
  window.location.href = "/admin-login";
}
