import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { toast } from 'sonner';
import { Loader2, Play, Clock, CheckCircle2, XCircle, AlertCircle } from 'lucide-react';
const API_BASE = '/api/catalogues/admin';
export default function CatalogueAdmin() {
const [loading, setLoading] = useState(false);
const [scraping, setScraping] = useState(false);
const [logs, setLogs] = useState([]);
const [stats, setStats] = useState(null);
const [enseignes, setEnseignes] = useState([]);
useEffect(() => {
loadEnseignes();
loadStats();
loadLogs();
}, []);
const loadEnseignes = async () => {
try {
const response = await axios.get('/api/catalogues/enseignes');
setEnseignes(response.data);
} catch (error) {
console.error('Error loading enseignes:', error);
}
};
const loadStats = async () => {
try {
const response = await axios.get(`${API_BASE}/stats`);
setStats(response.data);
} catch (error) {
console.error('Error loading stats:', error);
}
};
const loadLogs = async () => {
setLoading(true);
try {
const response = await axios.get(`${API_BASE}/scraping/logs?limit=20`);
setLogs(response.data);
} catch (error) {
console.error('Error loading logs:', error);
toast.error('Erreur lors du chargement des logs');
} finally {
setLoading(false);
}
};
const triggerScraping = async (enseigneId = null) => {
setScraping(true);
try {
const params = enseigneId ? { enseigne_id: enseigneId } : {};
const response = await axios.post(`${API_BASE}/scraping/trigger`, null, { params });
toast.success(response.data.message);
toast.info(`${response.data.catalogues_nouveaux} nouveaux catalogues trouvés`);
// Reload data
await Promise.all([loadStats(), loadLogs()]);
} catch (error) {
console.error('Error triggering scraping:', error);
toast.error('Erreur lors du déclenchement du scraping');
} finally {
setScraping(false);
}
};
const getStatusIcon = (status) => {
switch (status) {
case 'success':
return
Gérer le scraping des catalogues Bonial
{stats.total_catalogues}
{stats.derniere_mise_a_jour ? formatDate(stats.derniere_mise_a_jour) : 'Jamais'}
{stats.prochaine_execution}
Ou scraper une enseigne spécifique:
Aucun log disponible
) : (