from remember_remember_bot.util import (
    check_new_day,
    update_day,
    chat_is_active,
    get_file_path,
    today_lines,
)
import pytest
import datetime


def test_update_day():
    current_day = 0
    assert check_new_day(current_day)
    current_day = update_day()
    assert not check_new_day(current_day)


@pytest.mark.parametrize(
    ("messages", "active"),
    [
        (["/start"], True),
        (["/start", "/stop"], False),
        (["/start", "/stop", "Let's get this party started"], False),
        (
            [
                "/start",
                "Message deletion timer is set to 1 day by",
                "Message deletion timer is disabled by",
                "I will stop sending you messages now.",
            ],
            False,
        ),
        (["/start", "/stop", "/start"], True),
    ],
)
def test_chat_is_active(messages, active):
    assert chat_is_active(messages) == active


@pytest.mark.parametrize(
    "messages, tmp_file_path",
    [
        (["/file %file_path%"], "test1"),
        (["/file %file_path%", "/stop"], "test2"),
        (["I stored your reminders at the file %file_path%"], "test3"),
        (["/start", "/stop", "/start"], None),
    ],
    indirect=["tmp_file_path"],
)
def test_get_file_path(messages: [], tmp_file_path: str):
    if tmp_file_path:
        for listitem in range(len(messages)):
            messages[listitem] = messages[listitem].replace(
                "%file_path%", tmp_file_path
            )
    assert get_file_path(messages) == tmp_file_path


def test_today_lines():
    day = datetime.datetime.now().day
    month = datetime.datetime.now().month
    year = datetime.datetime.now().year
    lines = [
        f"{day}.{month}.{year}\tToday I had a great day!",
        f"{day}.{month}.2020\tI didn't go outside all day :) no appointments",
        "03.13.2024\tNice how they invented a 13th month extra for the Satanists!",
    ]
    result = today_lines(lines)
    print(result)
    assert len(result) == 2
    assert result[0] == lines[0]
    assert result[1] == lines[1]