import { ref } from 'vue';
import { useNotifications } from '../../../../shared/composables/useNotifications';
import { ApiMangaRepository } from '../../infrastructure/api/apiMangaRepository';

const mangaRepository = new ApiMangaRepository();

export function useMangaMonitoring() {
    const { showSuccess, showError } = useNotifications();

    const isToggling = ref(false);
    const toggleError = ref(null);

    const toggleMonitoring = async (mangaId, enabled) => {
        if (isToggling.value || !mangaId) return;

        isToggling.value = true;
        toggleError.value = null;

        try {
            console.log(`${enabled ? 'Activation' : 'Désactivation'} du monitoring pour le manga ${mangaId}`);

            await mangaRepository.toggleMonitoring(mangaId, enabled);

            const message = enabled
                ? 'Monitoring activé avec succès. Vous recevrez les nouveaux chapitres automatiquement.'
                : 'Monitoring désactivé avec succès. Les nouveaux chapitres ne seront plus téléchargés automatiquement.';

            showSuccess(message);

            console.log(`Monitoring ${enabled ? 'activé' : 'désactivé'} avec succès`);
            return true;
        } catch (error) {
            console.error('Erreur lors du changement de monitoring:', error);
            toggleError.value = error.message || 'Erreur lors du changement de monitoring';

            const errorMessage = enabled
                ? `Erreur lors de l'activation du monitoring: ${error.message || 'Une erreur inattendue est survenue'}`
                : `Erreur lors de la désactivation du monitoring: ${error.message || 'Une erreur inattendue est survenue'}`;

            showError(errorMessage);
            throw error;
        } finally {
            isToggling.value = false;
        }
    };

    const enableMonitoring = async (mangaId) => {
        return await toggleMonitoring(mangaId, true);
    };

    const disableMonitoring = async (mangaId) => {
        return await toggleMonitoring(mangaId, false);
    };

    const clearError = () => {
        toggleError.value = null;
    };

    return {
        isToggling,
        toggleError,
        toggleMonitoring,
        enableMonitoring,
        disableMonitoring,
        clearError
    };
}
