import pytest


ABBREV_TESTS = [
    ("Dr. Murat Bey ile görüştüm.", ["Dr.", "Murat", "Bey", "ile", "görüştüm", "."]),
    ("Dr.la görüştüm.", ["Dr.la", "görüştüm", "."]),
    ("Dr.'la görüştüm.", ["Dr.'la", "görüştüm", "."]),
    ("TBMM'de çalışıyormuş.", ["TBMM'de", "çalışıyormuş", "."]),
    (
        "Hem İst. hem Ank. bu konuda gayet iyi durumda.",
        ["Hem", "İst.", "hem", "Ank.", "bu", "konuda", "gayet", "iyi", "durumda", "."],
    ),
    (
        "Hem İst. hem Ank.'da yağış var.",
        ["Hem", "İst.", "hem", "Ank.'da", "yağış", "var", "."],
    ),
    ("Dr.", ["Dr."]),
    ("Yrd.Doç.", ["Yrd.Doç."]),
    ("Prof.'un", ["Prof.'un"]),
    ("Böl.'nde", ["Böl.'nde"]),
]


URL_TESTS = [
    (
        "Bizler de www.duygu.com.tr adında bir websitesi kurduk.",
        [
            "Bizler",
            "de",
            "www.duygu.com.tr",
            "adında",
            "bir",
            "websitesi",
            "kurduk",
            ".",
        ],
    ),
    (
        "Bizler de https://www.duygu.com.tr adında bir websitesi kurduk.",
        [
            "Bizler",
            "de",
            "https://www.duygu.com.tr",
            "adında",
            "bir",
            "websitesi",
            "kurduk",
            ".",
        ],
    ),
    (
        "Bizler de www.duygu.com.tr'dan satın aldık.",
        ["Bizler", "de", "www.duygu.com.tr'dan", "satın", "aldık", "."],
    ),
    (
        "Bizler de https://www.duygu.com.tr'dan satın aldık.",
        ["Bizler", "de", "https://www.duygu.com.tr'dan", "satın", "aldık", "."],
    ),
]


NUMBER_TESTS = [
    ("Rakamla 6 yazılıydı.", ["Rakamla", "6", "yazılıydı", "."]),
    ("Hava -4 dereceydi.", ["Hava", "-4", "dereceydi", "."]),
    (
        "Hava sıcaklığı -4ten +6ya yükseldi.",
        ["Hava", "sıcaklığı", "-4ten", "+6ya", "yükseldi", "."],
    ),
    (
        "Hava sıcaklığı -4'ten +6'ya yükseldi.",
        ["Hava", "sıcaklığı", "-4'ten", "+6'ya", "yükseldi", "."],
    ),
    ("Yarışta 6. oldum.", ["Yarışta", "6.", "oldum", "."]),
    ("Yarışta 438547745. oldum.", ["Yarışta", "438547745.", "oldum", "."]),
    ("Kitap IV. Murat hakkında.", ["Kitap", "IV.", "Murat", "hakkında", "."]),
    # ("Bana söylediği sayı 6.", ["Bana", "söylediği", "sayı", "6", "."]),
    ("Saat 6'da buluşalım.", ["Saat", "6'da", "buluşalım", "."]),
    ("Saat 6dan sonra buluşalım.", ["Saat", "6dan", "sonra", "buluşalım", "."]),
    ("6.dan sonra saymadım.", ["6.dan", "sonra", "saymadım", "."]),
    ("6.'dan sonra saymadım.", ["6.'dan", "sonra", "saymadım", "."]),
    ("Saat 6'ydı.", ["Saat", "6'ydı", "."]),
    ("5'te", ["5'te"]),
    ("6'da", ["6'da"]),
    ("9dan", ["9dan"]),
    ("19'da", ["19'da"]),
    ("VI'da", ["VI'da"]),
    ("5.", ["5."]),
    ("72.", ["72."]),
    ("VI.", ["VI."]),
    ("6.'dan", ["6.'dan"]),
    ("19.'dan", ["19.'dan"]),
    ("6.dan", ["6.dan"]),
    ("16.dan", ["16.dan"]),
    ("VI.'dan", ["VI.'dan"]),
    ("VI.dan", ["VI.dan"]),
    ("Hepsi 1994 yılında oldu.", ["Hepsi", "1994", "yılında", "oldu", "."]),
    ("Hepsi 1994'te oldu.", ["Hepsi", "1994'te", "oldu", "."]),
    (
        "2/3 tarihli faturayı bulamadım.",
        ["2/3", "tarihli", "faturayı", "bulamadım", "."],
    ),
    (
        "2.3 tarihli faturayı bulamadım.",
        ["2.3", "tarihli", "faturayı", "bulamadım", "."],
    ),
    (
        "2.3. tarihli faturayı bulamadım.",
        ["2.3.", "tarihli", "faturayı", "bulamadım", "."],
    ),
    (
        "2/3/2020 tarihli faturayı bulamadm.",
        ["2/3/2020", "tarihli", "faturayı", "bulamadm", "."],
    ),
    (
        "2/3/1987 tarihinden beri burda yaşıyorum.",
        ["2/3/1987", "tarihinden", "beri", "burda", "yaşıyorum", "."],
    ),
    (
        "2-3-1987 tarihinden beri burdayım.",
        ["2-3-1987", "tarihinden", "beri", "burdayım", "."],
    ),
    (
        "2.3.1987 tarihinden beri burdayım.",
        ["2.3.1987", "tarihinden", "beri", "burdayım", "."],
    ),
    (
        "Bu olay 2005-2006 tarihleri arasında oldu.",
        ["Bu", "olay", "2005", "-", "2006", "tarihleri", "arasında", "oldu", "."],
    ),
    (
        "Bu olay 4/12/2005-21/3/2006 tarihleri arasında oldu.",
        [
            "Bu",
            "olay",
            "4/12/2005",
            "-",
            "21/3/2006",
            "tarihleri",
            "arasında",
            "oldu",
            ".",
        ],
    ),
    (
        "Ek fıkra: 5/11/2003-4999/3 maddesine göre uygundur.",
        [
            "Ek",
            "fıkra",
            ":",
            "5/11/2003",
            "-",
            "4999/3",
            "maddesine",
            "göre",
            "uygundur",
            ".",
        ],
    ),
    (
        "2/A alanları: 6831 sayılı Kanunun 2nci maddesinin birinci fıkrasının (A) bendine göre",
        [
            "2/A",
            "alanları",
            ":",
            "6831",
            "sayılı",
            "Kanunun",
            "2nci",
            "maddesinin",
            "birinci",
            "fıkrasının",
            "(",
            "A",
            ")",
            "bendine",
            "göre",
        ],
    ),
    (
        "ŞEHİTTEĞMENKALMAZ Cad. No: 2/311",
        ["ŞEHİTTEĞMENKALMAZ", "Cad.", "No", ":", "2/311"],
    ),
    (
        "2-3-2025",
        [
            "2-3-2025",
        ],
    ),
    ("2/3/2025", ["2/3/2025"]),
    ("Yıllardır 0.5 uç kullanıyorum.", ["Yıllardır", "0.5", "uç", "kullanıyorum", "."]),
    (
        "Kan değerlerim 0.5-0.7 arasıydı.",
        ["Kan", "değerlerim", "0.5", "-", "0.7", "arasıydı", "."],
    ),
    ("0.5", ["0.5"]),
    ("1/2", ["1/2"]),
    ("%1", ["%", "1"]),
    ("%1lik", ["%", "1lik"]),
    ("%1'lik", ["%", "1'lik"]),
    ("%1lik dilim", ["%", "1lik", "dilim"]),
    ("%1'lik dilim", ["%", "1'lik", "dilim"]),
    ("%1.5", ["%", "1.5"]),
    # ("%1-%2 arası büyüme bekleniyor.", ["%", "1", "-", "%", "2", "arası", "büyüme", "bekleniyor", "."]),
    (
        "%1-2 arası büyüme bekliyoruz.",
        ["%", "1", "-", "2", "arası", "büyüme", "bekliyoruz", "."],
    ),
    (
        "%11-12 arası büyüme bekliyoruz.",
        ["%", "11", "-", "12", "arası", "büyüme", "bekliyoruz", "."],
    ),
    ("%1.5luk büyüme bekliyoruz.", ["%", "1.5luk", "büyüme", "bekliyoruz", "."]),
    (
        "Saat 1-2 arası gelin lütfen.",
        ["Saat", "1", "-", "2", "arası", "gelin", "lütfen", "."],
    ),
    ("Saat 15:30 gibi buluşalım.", ["Saat", "15:30", "gibi", "buluşalım", "."]),
    ("Saat 15:30'da buluşalım.", ["Saat", "15:30'da", "buluşalım", "."]),
    ("Saat 15.30'da buluşalım.", ["Saat", "15.30'da", "buluşalım", "."]),
    ("Saat 15.30da buluşalım.", ["Saat", "15.30da", "buluşalım", "."]),
    ("Saat 15 civarı buluşalım.", ["Saat", "15", "civarı", "buluşalım", "."]),
    ("9’daki otobüse binsek mi?", ["9’daki", "otobüse", "binsek", "mi", "?"]),
    ("Okulumuz 3-B şubesi", ["Okulumuz", "3-B", "şubesi"]),
    ("Okulumuz 3/B şubesi", ["Okulumuz", "3/B", "şubesi"]),
    ("Okulumuz 3B şubesi", ["Okulumuz", "3B", "şubesi"]),
    ("Okulumuz 3b şubesi", ["Okulumuz", "3b", "şubesi"]),
    (
        "Antonio Gaudí 20. yüzyılda, 1904-1914 yılları arasında on yıl süren bir reform süreci getirmiştir.",
        [
            "Antonio",
            "Gaudí",
            "20.",
            "yüzyılda",
            ",",
            "1904",
            "-",
            "1914",
            "yılları",
            "arasında",
            "on",
            "yıl",
            "süren",
            "bir",
            "reform",
            "süreci",
            "getirmiştir",
            ".",
        ],
    ),
    (
        "Dizel yakıtın avro bölgesi ortalaması olan 1,165 avroya kıyasla litre başına 1,335 avroya mal olduğunu gösteriyor.",
        [
            "Dizel",
            "yakıtın",
            "avro",
            "bölgesi",
            "ortalaması",
            "olan",
            "1,165",
            "avroya",
            "kıyasla",
            "litre",
            "başına",
            "1,335",
            "avroya",
            "mal",
            "olduğunu",
            "gösteriyor",
            ".",
        ],
    ),
    (
        "Marcus Antonius M.Ö. 1 Ocak 49'da, Sezar'dan Vali'nin kendisini barış dostu ilan ettiği bir bildiri yayınlamıştır.",
        [
            "Marcus",
            "Antonius",
            "M.Ö.",
            "1",
            "Ocak",
            "49'da",
            ",",
            "Sezar'dan",
            "Vali'nin",
            "kendisini",
            "barış",
            "dostu",
            "ilan",
            "ettiği",
            "bir",
            "bildiri",
            "yayınlamıştır",
            ".",
        ],
    ),
]


PUNCT_TESTS = [
    ("Gitmedim dedim ya!", ["Gitmedim", "dedim", "ya", "!"]),
    ("Gitmedim dedim ya!!", ["Gitmedim", "dedim", "ya", "!", "!"]),
    ("Gitsek mi?", ["Gitsek", "mi", "?"]),
    ("Gitsek mi??", ["Gitsek", "mi", "?", "?"]),
    ("Gitsek mi?!?", ["Gitsek", "mi", "?", "!", "?"]),
    (
        "Ankara - Antalya arası otobüs işliyor.",
        ["Ankara", "-", "Antalya", "arası", "otobüs", "işliyor", "."],
    ),
    (
        "Ankara-Antalya arası otobüs işliyor.",
        ["Ankara", "-", "Antalya", "arası", "otobüs", "işliyor", "."],
    ),
    ("Sen--ben, ya da onlar.", ["Sen", "--", "ben", ",", "ya", "da", "onlar", "."]),
    (
        "Senden, benden, bizden şarkısını biliyor musun?",
        ["Senden", ",", "benden", ",", "bizden", "şarkısını", "biliyor", "musun", "?"],
    ),
    (
        "Akif'le geldik, sonra da o ayrıldı.",
        ["Akif'le", "geldik", ",", "sonra", "da", "o", "ayrıldı", "."],
    ),
    ("Bu adam ne dedi şimdi???", ["Bu", "adam", "ne", "dedi", "şimdi", "?", "?", "?"]),
    (
        "Yok hasta olmuş, yok annesi hastaymış, bahaneler işte...",
        [
            "Yok",
            "hasta",
            "olmuş",
            ",",
            "yok",
            "annesi",
            "hastaymış",
            ",",
            "bahaneler",
            "işte",
            "...",
        ],
    ),
    (
        "Ankara'dan İstanbul'a ... bir aşk hikayesi.",
        ["Ankara'dan", "İstanbul'a", "...", "bir", "aşk", "hikayesi", "."],
    ),
    ("Ahmet'te", ["Ahmet'te"]),
    ("İstanbul'da", ["İstanbul'da"]),
]

GENERAL_TESTS = [
    (
        "1914'teki Endurance seferinde, Sir Ernest Shackleton'ın kaptanlığını yaptığı İngiliz Endurance gemisi yirmi sekiz kişi ile Antarktika'yı geçmek üzere yelken açtı.",
        [
            "1914'teki",
            "Endurance",
            "seferinde",
            ",",
            "Sir",
            "Ernest",
            "Shackleton'ın",
            "kaptanlığını",
            "yaptığı",
            "İngiliz",
            "Endurance",
            "gemisi",
            "yirmi",
            "sekiz",
            "kişi",
            "ile",
            "Antarktika'yı",
            "geçmek",
            "üzere",
            "yelken",
            "açtı",
            ".",
        ],
    ),
    (
        'Danışılan "%100 Cospedal" olduğunu belirtti.',
        ["Danışılan", '"', "%", "100", "Cospedal", '"', "olduğunu", "belirtti", "."],
    ),
    (
        "1976'da parkur artık kullanılmıyordu; 1990'da ise bir yangın, daha sonraları ahırlarla birlikte yıkılacak olan tahta tribünlerden geri kalanları da yok etmişti.",
        [
            "1976'da",
            "parkur",
            "artık",
            "kullanılmıyordu",
            ";",
            "1990'da",
            "ise",
            "bir",
            "yangın",
            ",",
            "daha",
            "sonraları",
            "ahırlarla",
            "birlikte",
            "yıkılacak",
            "olan",
            "tahta",
            "tribünlerden",
            "geri",
            "kalanları",
            "da",
            "yok",
            "etmişti",
            ".",
        ],
    ),
    (
        "Dahiyane bir ameliyat ve zorlu bir rehabilitasyon sürecinden sonra, tamamen iyileştim.",
        [
            "Dahiyane",
            "bir",
            "ameliyat",
            "ve",
            "zorlu",
            "bir",
            "rehabilitasyon",
            "sürecinden",
            "sonra",
            ",",
            "tamamen",
            "iyileştim",
            ".",
        ],
    ),
    (
        "Yaklaşık iki hafta süren bireysel erken oy kullanma döneminin ardından 5,7 milyondan fazla Floridalı sandık başına gitti.",
        [
            "Yaklaşık",
            "iki",
            "hafta",
            "süren",
            "bireysel",
            "erken",
            "oy",
            "kullanma",
            "döneminin",
            "ardından",
            "5,7",
            "milyondan",
            "fazla",
            "Floridalı",
            "sandık",
            "başına",
            "gitti",
            ".",
        ],
    ),
    (
        "Ancak, bu ABD Çevre Koruma Ajansı'nın dünyayı bu konularda uyarmasının ardından ortaya çıktı.",
        [
            "Ancak",
            ",",
            "bu",
            "ABD",
            "Çevre",
            "Koruma",
            "Ajansı'nın",
            "dünyayı",
            "bu",
            "konularda",
            "uyarmasının",
            "ardından",
            "ortaya",
            "çıktı",
            ".",
        ],
    ),
    (
        "Ortalama şansa ve 10.000 Sterlin değerinde tahvillere sahip bir yatırımcı yılda 125 Sterlin ikramiye kazanabilir.",
        [
            "Ortalama",
            "şansa",
            "ve",
            "10.000",
            "Sterlin",
            "değerinde",
            "tahvillere",
            "sahip",
            "bir",
            "yatırımcı",
            "yılda",
            "125",
            "Sterlin",
            "ikramiye",
            "kazanabilir",
            ".",
        ],
    ),
    (
        "Granit adaları; Seyşeller ve Tioman ile Saint Helena gibi volkanik adaları kapsar.",
        [
            "Granit",
            "adaları",
            ";",
            "Seyşeller",
            "ve",
            "Tioman",
            "ile",
            "Saint",
            "Helena",
            "gibi",
            "volkanik",
            "adaları",
            "kapsar",
            ".",
        ],
    ),
    (
        "Barış antlaşmasıyla İspanya, Amerika'ya Porto Riko, Guam ve Filipinler kolonilerini devretti.",
        [
            "Barış",
            "antlaşmasıyla",
            "İspanya",
            ",",
            "Amerika'ya",
            "Porto",
            "Riko",
            ",",
            "Guam",
            "ve",
            "Filipinler",
            "kolonilerini",
            "devretti",
            ".",
        ],
    ),
    (
        "Makedonya'nın sınır bölgelerini güvence altına alan Philip, büyük bir Makedon ordusu kurdu ve uzun bir fetih seferi için Trakya'ya doğru yürüdü.",
        [
            "Makedonya'nın",
            "sınır",
            "bölgelerini",
            "güvence",
            "altına",
            "alan",
            "Philip",
            ",",
            "büyük",
            "bir",
            "Makedon",
            "ordusu",
            "kurdu",
            "ve",
            "uzun",
            "bir",
            "fetih",
            "seferi",
            "için",
            "Trakya'ya",
            "doğru",
            "yürüdü",
            ".",
        ],
    ),
    (
        "Fransız gazetesi Le Figaro'ya göre bu hükumet planı sayesinde 42 milyon Euro kazanç sağlanabilir ve elde edilen paranın 15.5 milyonu ulusal güvenlik için kullanılabilir.",
        [
            "Fransız",
            "gazetesi",
            "Le",
            "Figaro'ya",
            "göre",
            "bu",
            "hükumet",
            "planı",
            "sayesinde",
            "42",
            "milyon",
            "Euro",
            "kazanç",
            "sağlanabilir",
            "ve",
            "elde",
            "edilen",
            "paranın",
            "15.5",
            "milyonu",
            "ulusal",
            "güvenlik",
            "için",
            "kullanılabilir",
            ".",
        ],
    ),
    (
        "Ortalama şansa ve 10.000 Sterlin değerinde tahvillere sahip bir yatırımcı yılda 125 Sterlin ikramiye kazanabilir.",
        [
            "Ortalama",
            "şansa",
            "ve",
            "10.000",
            "Sterlin",
            "değerinde",
            "tahvillere",
            "sahip",
            "bir",
            "yatırımcı",
            "yılda",
            "125",
            "Sterlin",
            "ikramiye",
            "kazanabilir",
            ".",
        ],
    ),
    (
        "3 Kasım Salı günü, Ankara Belediye Başkanı 2014'te hükümetle birlikte oluşturulan kentsel gelişim anlaşmasını askıya alma kararı verdi.",
        [
            "3",
            "Kasım",
            "Salı",
            "günü",
            ",",
            "Ankara",
            "Belediye",
            "Başkanı",
            "2014'te",
            "hükümetle",
            "birlikte",
            "oluşturulan",
            "kentsel",
            "gelişim",
            "anlaşmasını",
            "askıya",
            "alma",
            "kararı",
            "verdi",
            ".",
        ],
    ),
    (
        "Stalin, Abakumov'u Beria'nın enerji bakanlıkları üzerindeki baskınlığına karşı MGB içinde kendi ağını kurmaya teşvik etmeye başlamıştı.",
        [
            "Stalin",
            ",",
            "Abakumov'u",
            "Beria'nın",
            "enerji",
            "bakanlıkları",
            "üzerindeki",
            "baskınlığına",
            "karşı",
            "MGB",
            "içinde",
            "kendi",
            "ağını",
            "kurmaya",
            "teşvik",
            "etmeye",
            "başlamıştı",
            ".",
        ],
    ),
    (
        "Güney Avrupa'daki kazı alanlarının çoğunluğu gibi, bu bulgu M.Ö. 5. yüzyılın başlar",
        [
            "Güney",
            "Avrupa'daki",
            "kazı",
            "alanlarının",
            "çoğunluğu",
            "gibi",
            ",",
            "bu",
            "bulgu",
            "M.Ö.",
            "5.",
            "yüzyılın",
            "başlar",
        ],
    ),
    (
        "Sağlığın bozulması Hitchcock hayatının son yirmi yılında üretimini azalttı.",
        [
            "Sağlığın",
            "bozulması",
            "Hitchcock",
            "hayatının",
            "son",
            "yirmi",
            "yılında",
            "üretimini",
            "azalttı",
            ".",
        ],
    ),
]


TESTS = ABBREV_TESTS + URL_TESTS + NUMBER_TESTS + PUNCT_TESTS + GENERAL_TESTS


@pytest.mark.parametrize("text,expected_tokens", TESTS)
def test_tr_tokenizer_handles_allcases(tr_tokenizer, text, expected_tokens):
    tokens = tr_tokenizer(text)
    token_list = [token.text for token in tokens if not token.is_space]
    assert expected_tokens == token_list