#!/usr/bin/env python3
"""Tests pour CORRECTION 2 : detection et rejet du contenu paywall."""
import sys
import os
import unittest

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "agents_python"))


class TestDetectPaywall(unittest.TestCase):
    """Tests pour _detect_paywall."""

    def setUp(self):
        from media_fetcher import _detect_paywall
        self.detect = _detect_paywall

    def test_real_paywall_lemonde(self):
        """Texte reel d'un paywall lemonde.fr."""
        text = (
            "Lecture du Monde en cours sur un autre appareil. "
            "Vous pouvez lire Le Monde sur un seul appareil a la fois. "
            "Ce message s'affichera sur l'autre appareil."
        )
        self.assertTrue(self.detect(text))

    def test_real_article_with_subscribe_footer(self):
        """Article complet qui mentionne 'abonnez-vous' en pied de page."""
        text = (
            "Pascal Herard est un journaliste et formateur specialise "
            "dans les enjeux numeriques, la vie privee et la cybersecurite. "
            "Il intervient regulierement sur TV5MONDE pour des sujets lies "
            "au numerique et a la geopolitique digitale. " * 20 +
            "Abonnez-vous a notre newsletter."
        )
        # Article long (>500 chars) avec 1 seul pattern → PAS un paywall
        self.assertFalse(self.detect(text))

    def test_empty_text(self):
        self.assertTrue(self.detect(""))
        self.assertTrue(self.detect(None))

    def test_very_short_text(self):
        """Texte trop court = probablement paywall/vide."""
        self.assertTrue(self.detect("Cet article est reserve."))

    def test_short_with_pattern(self):
        """Court et avec pattern paywall."""
        text = "Cet article est reserve aux abonnes. Connectez-vous."
        self.assertTrue(self.detect(text))

    def test_normal_article(self):
        """Article normal sans paywall."""
        text = (
            "Khelil Ben Osman est un cyberactiviste tunisien "
            "qui a joue un role cle lors de la revolution de 2011. "
            "Il est connu pour ses interventions dans les medias "
            "francais sur les questions de cybersecurite et de "
            "surveillance numerique en Tunisie et en France. "
            "Il reside actuellement a Nantes ou il poursuit "
            "ses activites dans le domaine du numerique."
        )
        self.assertFalse(self.detect(text))

    def test_multiple_patterns_long_text(self):
        """Texte long avec 2+ patterns mais suffisamment de contenu."""
        text = (
            "Article complet sur la presse numerique. " * 30 +
            "Pour lire cet article en entier, abonnez-vous."
        )
        # 1200+ chars, 2 patterns mais texte long → PAS un paywall
        self.assertFalse(self.detect(text))

    def test_subscribe_to_read_english(self):
        """Paywall anglais."""
        text = "Subscribe to read this article. Already a subscriber? Log in."
        self.assertTrue(self.detect(text))


if __name__ == "__main__":
    unittest.main()
