import os
import unittest
from unittest.mock import patch

import windows_runtime


class HiddenSubprocessTests(unittest.TestCase):
    def test_hidden_subprocess_kwargs_include_windows_hiding_flags(self) -> None:
        kwargs = windows_runtime.hidden_subprocess_kwargs()
        if os.name == "nt":
            self.assertIn("startupinfo", kwargs)
            self.assertIn("creationflags", kwargs)
        else:
            self.assertEqual(kwargs, {})

    def test_run_hidden_forwards_hidden_kwargs(self) -> None:
        with patch("windows_runtime.subprocess.run") as run_mock:
            windows_runtime.run_hidden(["ffmpeg", "-version"], capture_output=True, text=True, check=True)

        kwargs = run_mock.call_args.kwargs
        self.assertTrue(kwargs["capture_output"])
        self.assertTrue(kwargs["text"])
        self.assertTrue(kwargs["check"])
        if os.name == "nt":
            self.assertIn("startupinfo", kwargs)
            self.assertIn("creationflags", kwargs)


class AlertTests(unittest.TestCase):
    def test_show_error_dialog_respects_disable_env(self) -> None:
        with patch.dict(os.environ, {windows_runtime.DISABLE_ALERTS_ENV: "1"}, clear=False):
            self.assertFalse(windows_runtime.show_error_dialog("title", "message"))


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