import base64
import tempfile
import unittest
from pathlib import Path

from core.utils.config import Settings


class RuntimeOptionTests(unittest.TestCase):
    def test_vlm_image_payload_mode_is_explicit(self):
        settings = Settings(VLM_IMAGE_INPUT_MODE="data_url")
        self.assertTrue(settings.use_data_url_for_vlm_images())

        settings = Settings(VLM_IMAGE_INPUT_MODE="raw_base64")
        self.assertFalse(settings.use_data_url_for_vlm_images())

    def test_runtime_switches_live_in_settings(self):
        settings = Settings(
            USE_CACHE=False,
            RESEARCH_MODE_FORCE="deep",
            DISABLE_EMBEDDING=True,
        )
        self.assertFalse(settings.USE_CACHE)
        self.assertEqual(settings.RESEARCH_MODE_FORCE, "deep")
        self.assertTrue(settings.DISABLE_EMBEDDING)

    def test_build_image_payload_uses_explicit_mode(self):
        from core.utils.image_payload import build_image_url

        with tempfile.TemporaryDirectory() as tmp_dir:
            image_path = Path(tmp_dir) / "sample.png"
            image_path.write_bytes(base64.b64decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+a7d0AAAAASUVORK5CYII="))

            data_url = build_image_url(str(image_path), settings=Settings(VLM_IMAGE_INPUT_MODE="data_url"))
            raw_b64 = build_image_url(str(image_path), settings=Settings(VLM_IMAGE_INPUT_MODE="raw_base64"))

        self.assertTrue(data_url.startswith("data:image/png;base64,"))
        self.assertFalse(raw_b64.startswith("data:"))


if __name__ == "__main__":
    unittest.main()