"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Search, User, CheckCircle, Coins } from "lucide-react"; interface UserResult { _id: string; name: string; username: string; email: string; role: string; referent?: string; prenom?: string; nom?: string; createdAt: string; } interface BalanceInfo { tokenCredits: number; lastRefill?: string; } export default function AddCreditsSingleUser() { const [searchTerm, setSearchTerm] = useState(""); const [searchResults, setSearchResults] = useState([]); const [selectedUser, setSelectedUser] = useState(null); const [userBalance, setUserBalance] = useState(null); const [searching, setSearching] = useState(false); const [loadingBalance, setLoadingBalance] = useState(false); const [adding, setAdding] = useState(false); const [success, setSuccess] = useState<{ newBalance: number } | null>(null); const searchUsers = async () => { if (!searchTerm.trim()) return; setSearching(true); setSelectedUser(null); setUserBalance(null); setSuccess(null); try { const response = await fetch( `/api/collections/users?search=${encodeURIComponent(searchTerm)}&limit=10` ); const data = await response.json(); if (data.data) { setSearchResults(data.data); } } catch (error) { console.error("Erreur lors de la recherche:", error); } finally { setSearching(false); } }; const selectUser = async (user: UserResult) => { setSelectedUser(user); setSearchResults([]); setSuccess(null); setLoadingBalance(true); try { // Récupérer la balance de l'utilisateur const response = await fetch( `/api/collections/balances?search=${user._id}&limit=1` ); const data = await response.json(); if (data.data && data.data.length > 0) { setUserBalance({ tokenCredits: data.data[0].tokenCredits || 0, lastRefill: data.data[0].lastRefill, }); } else { setUserBalance({ tokenCredits: 0 }); } } catch (error) { console.error("Erreur lors de la récupération de la balance:", error); setUserBalance({ tokenCredits: 0 }); } finally { setLoadingBalance(false); } }; const addCredits = async () => { if (!selectedUser) return; if ( !confirm( `Êtes-vous sûr de vouloir ajouter 3 millions de crédits à ${selectedUser.name || selectedUser.email} ?` ) ) { return; } setAdding(true); try { const response = await fetch("/api/add-credits-single", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ userId: selectedUser._id }), }); const data = await response.json(); if (data.success) { setSuccess({ newBalance: data.newBalance }); setUserBalance({ tokenCredits: data.newBalance }); } else { alert("Erreur: " + (data.error || data.message)); } } catch (error) { console.error("Erreur lors de l'ajout des crédits:", error); alert("Erreur lors de l'ajout des crédits"); } finally { setAdding(false); } }; const reset = () => { setSearchTerm(""); setSearchResults([]); setSelectedUser(null); setUserBalance(null); setSuccess(null); }; return ( Ajouter des Crédits à un Utilisateur Rechercher un utilisateur et lui ajouter 3 millions de tokens {/* Barre de recherche */}
setSearchTerm(e.target.value)} onKeyDown={(e) => e.key === "Enter" && searchUsers()} />
{/* Résultats de recherche */} {searchResults.length > 0 && (
{searchResults.map((user) => (
selectUser(user)} >

{user.name || user.username}

{user.email}

{user.role}
))}
)} {/* Utilisateur sélectionné */} {selectedUser && (

Utilisateur sélectionné

ID:

{selectedUser._id}

Nom:

{selectedUser.name || selectedUser.username}

Email:

{selectedUser.email}

Rôle: {selectedUser.role}
{selectedUser.referent && (
Référent:

{selectedUser.referent}

)}
Crédits actuels: {loadingBalance ? (

Chargement...

) : (

{userBalance?.tokenCredits.toLocaleString() || "0"}

)}
{/* Boutons d'action */}
)} {/* Message de succès */} {success && (

Crédits ajoutés avec succès !

Nouveau solde:{" "} {success.newBalance.toLocaleString()} {" "} tokens

)}
); }