import json
import pytest

from ukr.wfst import normalize, json_graph, apply_fst_text


@pytest.mark.parametrize('spoken,expected', [
    ("це трапилося дві тисячі дев'ятнадцятого числа", 'це трапилося 2019-го числа'),
    ("коливання в межах трьох копійок експерт оцінив як прийнятні", 'коливання в межах ₴0.03 експерт оцінив як прийнятні'),
    ("збагатила аферистів на три тисячі гривень", 'збагатила аферистів на ₴3000'),
    ("близько двох мільйонів гривень", 'близько ₴2 мільйонів'),
    ("один одного", 'один одного'),
    ("перший перший", 'перший перший'),
    ("одна кішка", 'одна кішка'),
])
def test_word(spoken, expected):
    assert normalize(spoken) == expected


@pytest.mark.parametrize('spoken,expected', [
    ("це трапилося дев'ятнадцятого числа", 'це трапилося 19-го числа'),
    ("коливання в межах трьох копійок експерт оцінив як прийнятні", 'коливання в межах ₴0.03 експерт оцінив як прийнятні'),
    ("збагатила аферистів на три тисячі гривень", 'збагатила аферистів на ₴3000'),
    ("близько двох мільйонів гривень", 'близько ₴2 мільйонів'),
    ("першого січня дві тисячі першого року", '1 січня 2001 року'),
    ("третє червня дві тисячі двадцять третього", '3 червня 2023'),
    ("першого січня", '1 січня'),
    ("дві тисячі першого рік", '2001 рік'),
    ("дев'ятсот сорок п'ятий рік до нашої ери", '945 рік до н. е.'),
    ("сто вісімдесят восьмий рік нашої ери", '188 рік н. е.'),
])
def test_word__json_graph(spoken, expected):
    json_text = apply_fst_text(spoken, json_graph)
    words = json.loads(json_text)
    text = ' '.join([list(word.values())[0] for word in words])

    assert text == expected
