/**
 * Service d'authentification pour COOP-CA AMIFOND
 *
 * Contient toutes les fonctions pour interagir avec l'API d'authentification
 */

import { apiClient } from "@/lib/api-client";
import { apiEndpoints } from "@/lib/api-config";
import type {
  LoginRequest,
  LoginResponse,
  RegisterRequest,
  RegisterResponse,
  User,
  PasswordChangeRequest,
  PasswordResetRequest,
  PasswordResetConfirmRequest,
  TwoFactorSetupRequest,
  TwoFactorVerifyRequest,
  TwoFactorResponse,
  VerificationRequest,
  VerificationConfirmRequest,
} from "@/types/auth";

export class AuthService {
  /**
   * Connexion utilisateur
   */
  static async login(credentials: LoginRequest): Promise<LoginResponse> {
    const response = await apiClient.post<LoginResponse>(apiEndpoints.auth.login, credentials);
    return response;
  }

  /**
   * Déconnexion utilisateur
   */
  static async logout(): Promise<void> {
    try {
      await apiClient.post(apiEndpoints.auth.logout);
    } catch (error) {
      // Même si la déconnexion côté serveur échoue, log l'erreur
      console.warn("Erreur lors de la déconnexion côté serveur:", error);
    }
  }

  /**
   * Inscription utilisateur
   */
  static async register(data: RegisterRequest): Promise<RegisterResponse> {
    return apiClient.post<RegisterResponse>(apiEndpoints.auth.register, data);
  }

  /**
   * Récupérer les informations utilisateur actuel
   */
  static async getCurrentUser(): Promise<User> {
    return apiClient.get<User>(apiEndpoints.auth.me);
  }

  /**
   * Mettre à jour les informations utilisateur
   */
  static async updateUser(userData: Partial<User>): Promise<User> {
    return apiClient.patch<User>(apiEndpoints.auth.me, userData);
  }

  /**
   * Changer le mot de passe
   */
  static async changePassword(data: PasswordChangeRequest): Promise<{ detail: string }> {
    return apiClient.post<{ detail: string }>(apiEndpoints.auth.password.change, data);
  }

  /**
   * Demander un reset de mot de passe
   */
  static async requestPasswordReset(data: PasswordResetRequest): Promise<{ detail: string }> {
    return apiClient.post<{ detail: string }>(apiEndpoints.auth.password.reset, data);
  }

  /**
   * Confirmer le reset de mot de passe
   */
  static async confirmPasswordReset(data: PasswordResetConfirmRequest): Promise<{ detail: string }> {
    return apiClient.post<{ detail: string }>(apiEndpoints.auth.password.resetConfirm, data);
  }

  
}

export default AuthService;
