from pathlib import Path
from unittest import mock

import pytest

from libretime_playout.config import Config
from libretime_playout.liquidsoap.entrypoint import generate_entrypoint
from libretime_playout.liquidsoap.models import Info, StreamPreferences

from ..fixtures import entrypoint_1_1_snapshot, entrypoint_1_4_snapshot


@pytest.mark.parametrize(
    "version, expected",
    [
        pytest.param((1, 1, 1), entrypoint_1_1_snapshot, id="snapshot_1.1"),
        pytest.param((1, 4, 4), entrypoint_1_4_snapshot, id="snapshot_1.4"),
    ],
)
def test_generate_entrypoint(tmp_path: Path, config: Config, version, expected):
    entrypoint_filepath = tmp_path / "radio.liq"

    with mock.patch(
        "libretime_playout.liquidsoap.entrypoint.here",
        Path("/fake"),
    ):
        generate_entrypoint(
            entrypoint_filepath,
            log_filepath=Path("/var/log/radio.log"),
            config=config,
            preferences=StreamPreferences(
                input_fade_transition=0.0,
                message_format=0,
                message_offline="LibreTime - offline",
            ),
            info=Info(
                station_name="LibreTime",
            ),
            version=version,
        )

    found = entrypoint_filepath.read_text(encoding="utf-8")
    assert found == expected