import pytest
from aix.pipeline.labels import generate_alt_labels, looks_like_label, parse


@pytest.mark.parametrize("raw,expected", [
    ("উত্তর: ৩ (গ)", ("3", "গ")), ("Ans to Q 3 c", ("3", "গ")), ("৩।", ("3", None)), ("ক)", (None, "ক")),
    ("3(a)", ("3", "ক")), ("প্রশ্ন নং ১২", ("12", None)), ("৩-ঘ", ("3", "ঘ")), ("Q.5", ("5", None)),
    ("উঃ ৭", ("7", None)), ("٣", ("3", None)), ("hello world", (None, None))])
def test_parse(raw, expected):
    assert parse(raw) == expected


@pytest.mark.parametrize("text", ["৩(গ) উদ্দীপকের রহিম", "ক) বাংলাদেশ", "(a) photosynthesis", "উত্তর: ৫ আমাদের",
                                  "3. The cell", "৩। জসীমউদ্দীন", "Q.5 Newton", "গ। কারণ"])
def test_label_lines(text):
    assert looks_like_label(text)


@pytest.mark.parametrize("text", ["A cell is the unit", "ক্ষুদ্র ঋণ", "আমাদের দেশের নাম", "I think that",
                                  "a + b = c", "2x + 3 = 7 so"])
def test_ordinary_lines(text):
    assert not looks_like_label(text)


def test_alt_labels_round_trip():
    for alt in generate_alt_labels("3", "গ"):
        q, sub = parse(alt)
        assert sub == "গ" and q in ("3", None)
    for alt in generate_alt_labels("12"):
        assert parse(alt) == ("12", None)
