"""
Tests
"""

import pytest
from load_one_data import dump_diff, one_dump_test

from ArWikiCats import resolve_label_ar
from ArWikiCats.legacy_bots.ma_bots2.country2_label_bot import c_2_1_lab

test_data = {
    "american documentary television series": "مسلسلات تلفزيونية وثائقية أمريكية",
    "american propaganda films": "أفلام دعائية أمريكية",
    "brazilian television shows": "عروض تلفزيونية برازيلية",
    "british television series": "مسلسلات تلفزيونية بريطانية",
    "documentary television series": "مسلسلات تلفزيونية وثائقية",
}

fast_and_data = {
    "akrotiri and dhekelia": "أكروتيري ودكليا",
    "andaman and nicobar islands": "جزر أندمان ونيكوبار",
    "anime and manga": "أنمي ومانغا",
    "antigua and barbuda": "أنتيغوا وباربودا",
    "argyll and bute": "أرغيل وبوت",
    "art museums and galleries": "متاحف فنية ومعارض",
    "bosnia and herzegovina soldiers": "مجندون بوسنيون",
    "bosnia and herzegovina": "البوسنة والهرسك",
    "brighton and hove": "برايتون أند هوف",
    "perth and kinross": "بيرث وكينروس",
    "ross and cromarty": "روس وكرومارتي",
    "saint kitts and nevis": "سانت كيتس ونيفيس",
    "saint pierre and miquelon": "سان بيير وميكلون",
    "saint vincent and grenadines": "سانت فنسنت وجزر غرينادين",
    "saxe-coburg and gotha": "دوقية ساكسونيا كوبورغ وغوتا",
    "science and technology": "العلوم والتقانة",
    "sports clubs and teams": "أندية وفرق رياضية",
    "são tomé and príncipe": "ساو تومي وبرينسيب",
    "trinidad and tobago coast guard": "خفر السواحل الترنيدادي",
    "trinidad and tobago descent": "أصل ترنيدادي",
    "trinidad and tobago": "ترينيداد وتوباغو",
    "turks and caicos islands": "جزر توركس وكايكوس",
    "tyne and wear": "تاين و وير",
}

fast_data_c_2_1_lab = {
    "australian royal navy": "البحرية الملكية الأسترالية",
    "swedish royal navy": "البحرية الملكية السويدية",
    "thai royal navy": "البحرية الملكية التايلندية",
    "1st century bc": "القرن 1 ق م",
    "6th century bc": "القرن 6 ق م",
    "7th century bc": "القرن 7 ق م",
    "8th century bc": "القرن 8 ق م",
    "abbasid caliphate": "الدولة العباسية",
    "algerian civil war": "الحرب الأهلية الجزائرية",
    "amazonas (brazilian state)": "الأمازون (ولاية)",
    "american civil war": "الحرب الأهلية الأمريكية",
    "american football executives": "مسيرو كرة قدم أمريكية",
    "american football players": "لاعبو كرة قدم أمريكية",
    "american revolution": "الثورة الأمريكية",
    "andorra la vella": "أندورا لا فيلا",
    "ang thong province": "محافظة أنغ ثونغ",
    "arab world": "الوطن العربي",
    "archelaus of macedon": "أرخيلاوس الأول المقدوني",
    "asian football confederation": "الاتحاد الآسيوي لكرة القدم",
    "asian tennis federation": "الاتحاد الآسيوي لكرة المضرب",
    "athletics navigational boxes": "صناديق تصفح ألعاب قوى",
    "australian capital territory": "إقليم العاصمة الأسترالية",
    "australian national university": "جامعة أستراليا الوطنية",
    "australian royal air force": "القوات الجوية الملكية الأسترالية",
    "australian rules football": "كرة القدم الأسترالية",
    "aviation accidents or incidents": "حوادث طيران",
    "azerbaijan soviet socialist republic": "الجمهورية الأذرية السوفيتية الاشتراكية",
    "b. r. ambedkar": "أمبيدكار",
    "baal shem tov": "بعل شيم توف",
    "baja california sur": "ولاية باخا كاليفورنيا سور",
    "bangka belitung islands": "بانغكا - بليتونغ",
    "banteay meanchey province": "محافظة بانتياي مينتشي",
    "boadilla del monte": "بواديلا ديل مونتي",
    "bocas del toro province": "محافظة بوكاس ديل تورو",
    "british empire": "الإمبراطورية البريطانية",
    "british virgin islands": "جزر العذراء البريطانية",
    "buenos aires province": "مقاطعة بوينس آيرس",
    "byzantine empire": "الإمبراطورية البيزنطية",
    "cayman islands": "جزر كايمان",
    "central african republic": "جمهورية إفريقيا الوسطى",
    "channel islands": "جزر القنال الإنجليزي",
    "cocos (keeling) islands": "جزر كوكوس",
    "cook islands": "جزر كوك",
    "covid-19 pandemic": "جائحة فيروس كورونا",
    "czech republic": "التشيك",
    "dominican republic": "جمهورية الدومينيكان",
    "dutch east indies": "الهند الشرقية الهولندية",
    "dutch republic": "جمهورية هولندا",
    "east midlands": "ميدلاند الشرقية",
    "european union": "الاتحاد الأوروبي",
    "falkland islands": "جزر فوكلاند",
    "faroe islands": "جزر فارو",
    "fatimid caliphate": "الدولة الفاطمية",
    "federated states-of micronesia": "ولايات ميكرونيسيا المتحدة",
    "gaza strip": "قطاع غزة",
    "holy roman empire": "الإمبراطورية الرومانية المقدسة",
    "israel–hamas war": "الحرب الفلسطينية الإسرائيلية",
    "marshall islands": "جزر مارشال",
    "middle east": "الشرق الأوسط",
    "new republic": "ذا نيو ريببلك",
    "new york review of books": "نيويورك ريفيو أوف بوكس",
    "northern mariana islands": "جزر ماريانا الشمالية",
    "oliveira de azeméis": "أوليفيرا دي ازميس",
    "olympic games": "الألعاب الأولمبية",
    "orange free state": "دولة البرتقال الحرة",
    "order of": "وسام",
    "osama bin laden": "أسامة بن لادن",
    "ottoman empire": "الدولة العثمانية",
    "palestinian national authority": "السلطة الوطنية الفلسطينية",
    "papua new guinea": "بابوا غينيا الجديدة",
    "paschim medinipur district": "مقاطعة باشيم مدينبور",
    "pays de la loire": "وادي اللوار",
    "pitcairn islands": "جزر بيتكيرن",
    "polish air force": "القوات الجوية البولندية",
    "polish–lithuanian commonwealth": "الكومنولث البولندي الليتواني",
    "pope alexander vi": "إسكندر السادس",
    "pope john paul ii": "البابا يوحنا بولص الثاني",
    "pope leo xiii": "ليون الثالث عشر",
    "pope paul vi": "بولس السادس",
    "pope pius xi": "بيوس الحادي عشر",
    "preah vihear province": "محافظة برياه فيهير",
    "prince edward island": "جزيرة الأمير إدوارد",
    "principality of serbia": "إمارة صربيا",
    "province of canada": "مقاطعة كندا",
    "province of tarragona": "طراغونة (مقاطعة)",
    "puerto rican descent": "أصل بورتوريكي",
    "purba medinipur district": "مقاطعة بوبا مدينبور",
    "póvoa de varzim": "بوفوا دي فارزيم",
    "rajanna sircilla district": "مقاطعة راجانا سيرسيلا",
    "ras al khaimah": "رأس الخيمة (مدينة)",
    "revolutionary socialist party (india)": "الحزب الاشتراكي الثوري",
    "rhondda cynon taf": "روندا كينون تاف",
    "richmond upon thames": "ريتشموند (لندن)",
    "rio de janeiro (city)": "ريو دي جانيرو",
    "rio de janeiro (state)": "ولاية ريو دي جانيرو",
    "rio de janeiro": "ريو دي جانيرو",
    "rio grande do norte": "ريو غراندي دو نورتي",
    "rio grande do sul": "ريو غراندي دو سول",
    "rio negro (amazon)": "ريو نيغرو (الأمازون)",
    "romanian naval forces": "البحرية الرومانية",
    "royal air force": "القوات الجوية الملكية",
    "royal college of nursing": "كلية التمريض الملكية",
    "rugby union players": "لاعبو اتحاد رجبي",
    "russian air force": "القوات الجوية الروسية",
    "russian soviet federative socialist republic": "جمهورية روسيا السوفيتية الاتحادية الاشتراكية",
    "río de la plata": "ريو دي لا بلاتا (نهر)",
    "río negro province": "محافظة ريو نيغرو",
    "salt lake city": "سولت ليك (مدينة)",
    "san francisco bay area": "منطقة خليج سان فرانسيسكو",
    "san luis potosí": "ولاية سان لويس بوتوسي",
    "san luis province": "محافظة سان لويس",
    "santa catarina (state)": "ولاية سانتا كاتارينا",
    "santa cruz de tenerife": "سانتا كروث دي تينيريفه",
    "santa fe province": "محافظة سانتا-في",
    "santa maria da feira": "سانتا ماريا دا فييرا",
    "santiago de cuba": "سانتياغو دي كوبا",
    "santiago del estero province": "محافظة سانتياغو ديل استيرو",
    "santiago do cacém": "سانتياغو دو كاسيم",
    "santiago metropolitan region": "إقليم سانتياغو متروبوليتان",
    "sasanian empire": "الإمبراطورية الساسانية",
    "satu mare county": "مقاطعة ساتو ماري",
    "science fiction magazines": "مجلات خيال علمي",
    "second bulgarian empire": "الإمبراطورية البلغارية الثانية",
    "second polish republic": "الجمهورية البولندية الثانية",
    "security service of ukraine": "خدمة أمن أوكرانيا",
    "siem reap province": "محافظة سيم رياب",
    "singapore air force personnel": "أفراد القوات الجوية السنغافورية",
    "sixth dynasty of egypt": "الأسرة المصرية السادسة",
    "sogn og fjordane": "سوغن وفيوردانه",
    "solomon islands": "جزر سليمان",
    "soviet union": "الاتحاد السوفيتي",
    "spanish civil war": "الحرب الأهلية الإسبانية",
    "sri lanka air force": "القوات الجوية السريلانكية",
    "sri lanka navy": "البحرية السريلانكية",
    "sri lankan civil war": "الحرب الأهلية السريلانكية",
    "sri lankan descent": "أصل سريلانكي",
    "st. johns river": "نهر سانت جونز",
    "state lower houses": "مجالس نواب الولايات",
    "sultanate of zanzibar": "سلطنة زنجبار",
    "syrian civil war": "الحرب الأهلية السورية",
    "são paulo (city)": "ساو باولو",
    "são paulo (state)": "ولاية ساو باولو",
    "tai po district": "مقاطعة تاي بو",
    "telugu desam party": "حزب تيلوغو ديسام",
    "thai royal air force": "القوات الجوية الملكية التايلندية",
    "third dynasty of egypt": "الأسرة المصرية الثالثة",
    "thirteen colonies": "المستعمرات الثلاث عشرة",
    "thirtieth dynasty of egypt": "الأسرة المصرية الثلاثون",
    "turkish air force": "القوات الجوية التركية",
    "twelfth dynasty of egypt": "الأسرة المصرية الثانية عشر",
    "twenty-fifth dynasty of egypt": "الأسرة المصرية الخامسة والعشرون",
    "twenty-fourth dynasty of egypt": "الأسرة المصرية الرابعة والعشرون",
    "twenty-second dynasty of egypt": "الأسرة المصرية الثانية والعشرون",
    "u.s. virgin islands": "جزر العذراء الأمريكية",
    "ukrainian soviet socialist republic": "جمهورية أوكرانيا السوفيتية الاشتراكية",
    "united arab emirates": "الإمارات العربية المتحدة",
    "united kingdom government": "حكومة المملكة المتحدة",
    "united kingdom": "المملكة المتحدة",
    "united nations": "الأمم المتحدة",
    "united states virgin islands": "جزر العذراء الأمريكية",
    "united states": "الولايات المتحدة",
    "west bank": "الضفة الغربية",
    "west indies": "الهند الغربية",
    "west midlands (county)": "مقاطعة ميدلاند الغربية",
    "west midlands (region)": "منطقة ميدلاند الغربية",
}


@pytest.mark.parametrize("category, expected", fast_data_c_2_1_lab.items(), ids=fast_data_c_2_1_lab.keys())
@pytest.mark.fast
def test_c_2_1_lab(category: str, expected: str) -> None:
    label = c_2_1_lab(category, with_years=True)
    assert label == expected


@pytest.mark.parametrize("category, expected", test_data.items(), ids=test_data.keys())
@pytest.mark.fast
def test_test_data(category: str, expected: str) -> None:
    label = resolve_label_ar(category)
    assert label == expected


to_test = [
    ("test_c_2_1_lab", fast_data_c_2_1_lab, c_2_1_lab),
    ("test_c_2_1_lab", fast_and_data, c_2_1_lab),
]


@pytest.mark.parametrize("name,data, callback", to_test)
@pytest.mark.dump
def test_dump_all(name: str, data: dict[str, str], callback) -> None:
    expected, diff_result = one_dump_test(data, callback)
    dump_diff(diff_result, name)
    assert diff_result == expected, f"Differences found: {len(diff_result):,}, len all :{len(data):,}"
