/**
 * TokenStorage - Service de gestion du stockage des tokens dans localStorage
 * T0169: Service simple pour stocker, récupérer et supprimer les tokens d'authentification
 */

const ACCESS_TOKEN_KEY = 'veza_access_token';
const REFRESH_TOKEN_KEY = 'veza_refresh_token';

/**
 * Classe TokenStorage pour gérer le stockage des tokens
 * T0169: Service de gestion du stockage tokens avec localStorage
 */
export class TokenStorage {
  /**
   * Stocke les tokens d'authentification dans localStorage
   * T0169: Stocke access token et refresh token
   * @param accessToken - Token d'accès JWT
   * @param refreshToken - Token de rafraîchissement
   */
  static setTokens(accessToken: string, refreshToken: string): void {
    localStorage.setItem(ACCESS_TOKEN_KEY, accessToken);
    localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken);
  }

  /**
   * Récupère le token d'accès depuis localStorage
   * T0169: Récupère access token
   * @returns Token d'accès ou null si non trouvé
   */
  static getAccessToken(): string | null {
    return localStorage.getItem(ACCESS_TOKEN_KEY);
  }

  /**
   * Récupère le token de rafraîchissement depuis localStorage
   * T0169: Récupère refresh token
   * @returns Token de rafraîchissement ou null si non trouvé
   */
  static getRefreshToken(): string | null {
    return localStorage.getItem(REFRESH_TOKEN_KEY);
  }

  /**
   * Supprime tous les tokens de localStorage
   * T0169: Supprime tokens (logout)
   */
  static clearTokens(): void {
    localStorage.removeItem(ACCESS_TOKEN_KEY);
    localStorage.removeItem(REFRESH_TOKEN_KEY);
  }

  /**
   * Vérifie si des tokens sont présents dans localStorage
   * T0169: Vérifie la présence des tokens
   * @returns true si les deux tokens sont présents, false sinon
   */
  static hasTokens(): boolean {
    return !!this.getAccessToken() && !!this.getRefreshToken();
  }
}

