/**
 * 认证工具模块，处理用户token的存储和管理
 */
import { localStorage } from './storage';

// Token 相关的键名
export const TOKEN_KEY = 'user_token';
export const USER_INFO_KEY = 'user_info';

/**
 * 设置用户 token
 * @param token 用户 token
 * @param expire 过期时间（单位：毫秒），默认 24 小时
 */
export function setToken(token: string, expire: number = 24 * 60 * 60 * 1000): void {
  localStorage.set(TOKEN_KEY, token, expire);
}

/**
 * 获取用户 token
 * @returns 用户 token，如果不存在或已过期则返回 null
 */
export function getToken(): string | null {
  return localStorage.get<string>(TOKEN_KEY);
}

/**
 * 删除用户 token
 */
export function removeToken(): void {
  localStorage.remove(TOKEN_KEY);
}

/**
 * 检查是否存在有效的 token
 * @returns 是否存在有效的 token
 */
export function hasToken(): boolean {
  return getToken() !== null;
}

/**
 * 设置用户信息
 * @param userInfo 用户信息对象
 * @param expire 过期时间（单位：毫秒），默认与token相同
 */
export function setUserInfo<T extends Record<string, any>>(userInfo: T, expire: number = 24 * 60 * 60 * 1000): void {
  localStorage.set(USER_INFO_KEY, userInfo, expire);
}

/**
 * 获取用户信息
 * @returns 用户信息对象，如果不存在或已过期则返回 null
 */
export function getUserInfo<T extends Record<string, any>>(): T | null {
  return localStorage.get<T>(USER_INFO_KEY);
}

/**
 * 删除用户信息
 */
export function removeUserInfo(): void {
  localStorage.remove(USER_INFO_KEY);
}

/**
 * 清除所有认证相关信息（登出时使用）
 */
export function clearAuth(): void {
  removeToken();
  removeUserInfo();
}

/**
 * 刷新 token 的过期时间
 * @param expire 新的过期时间（单位：毫秒），默认 24 小时
 * @returns 是否成功刷新（如果 token 不存在则返回 false）
 */
export function refreshTokenExpire(expire: number = 24 * 60 * 60 * 1000): boolean {
  const token = getToken();
  if (!token) return false;
  
  setToken(token, expire);
  return true;
} 