import unittest
from pathlib import Path


class ProtocolContractTests(unittest.TestCase):
    def test_bridge_source_declares_secure_transport_and_dpapi(self):
        source = (Path(__file__).parents[1] / 'src' / 'filyx_music_bridge.py').read_text(encoding='utf-8')
        self.assertIn("WS_URL = 'wss://", source)
        self.assertIn('CryptProtectData', source)
        self.assertIn('globalsystemmediatransportcontrolssessionmanager', source.lower())

    def test_no_streaming_provider_api_request(self):
        source = (Path(__file__).parents[1] / 'src' / 'filyx_music_bridge.py').read_text(encoding='utf-8').lower()
        self.assertNotIn('api.spotify.com', source)
        self.assertNotIn('accounts.spotify.com', source)

    def test_vlc_and_netflix_detection_stays_local(self):
        source = (Path(__file__).parents[1] / 'src' / 'filyx_music_bridge.py').read_text(encoding='utf-8').lower()
        self.assertIn("'vlc'", source)
        self.assertIn("'netflix'", source)
        self.assertIn('visible_window_titles', source)
        self.assertIn('foreground_window_details', source)

    def test_snap_bridge_supports_numeric_keypad_shortcuts(self):
        source = (Path(__file__).parents[1] / 'src' / 'filyx_music_bridge.py').read_text(encoding='utf-8')
        self.assertIn("key.startswith('NUM')", source)
        self.assertIn('0x60 + int(key[3:])', source)
        self.assertIn("'NUMADD': 0x6B", source)
        self.assertIn("'ARROWLEFT': 0x25", source)
        self.assertIn("'BRACKETLEFT': 0xDB", source)
        self.assertIn("FindWindowW(None, 'Snap Camera')", source)
        self.assertIn('SendInput', source)

    def test_snap_bridge_does_not_require_a_modifier(self):
        source = (Path(__file__).parents[1] / 'src' / 'filyx_music_bridge.py').read_text(encoding='utf-8')
        self.assertIn("if not parts: raise ValueError('Raccourci Snap Camera invalide.')", source)
        self.assertNotIn('if not modifiers or len(modifiers)', source)


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