"""Bounded read-only signed-resource search for the GalaxyCamera CSM binding."""
from concurrent.futures import ThreadPoolExecutor
import importlib.util
import json
from pathlib import Path
import re
import sys

ROOT = Path(__file__).resolve().parents[1]
OUTPUT = ROOT / 'artifacts/galaxy-query-research/constellations/gamecamera-csm-leads.json'
saved = sys.argv
sys.argv = ['inventory', str(OUTPUT)]
spec = importlib.util.spec_from_file_location('assets', ROOT / 'research/galaxy_asset_inventory.py')
assets = importlib.util.module_from_spec(spec)
spec.loader.exec_module(assets)
sys.argv = saved
metadata = json.loads((ROOT / 'artifacts/galaxy-query-research/palette-resources/signed-metadata.json').read_text(encoding='utf-8-sig'))
keys = [row['key'] for row in metadata['headers'] if any('CodeStateMachine' in value for value in row['strings'])]


def scan(key):
    path = assets.ROOT / ('0' + key[0]) / key
    prefix = assets.decode(path, 262 + 65536)
    hits = [(match.start(), match.group().decode('ascii', errors='replace'))
        for match in re.finditer(rb'[A-Za-z_][A-Za-z0-9_.]{2,90}', prefix)
        if re.search(rb'gamecamera|galaxycamera', match.group(), re.I)]
    return dict(key=key, bytes=path.stat().st_size, prefixBytes=len(prefix), hits=hits) if hits else None


with ThreadPoolExecutor(max_workers=4) as pool:
    found = [row for row in pool.map(scan, keys) if row]
OUTPUT.write_text(json.dumps(dict(scope='Signed CSM headers plus at most64KiB decrypted FRES prefixes; no process/network access',
    scanned=len(keys), resources=found), indent=2) + '\n', encoding='utf-8')
print(json.dumps(dict(scanned=len(keys), matches=found), indent=2))
