#!/usr/bin/env python3
import subprocess
import json
import sys
import struct

def get_rpm_packages():
    try:
        result = subprocess.run(
            ['rpm', '-qa', '--qf', '%{name} %{EVR}\n'],
            capture_output=True,
            text=True,
            check=True
        )
        
        packages = {}
        for line in result.stdout.strip().split('\n'):
            if line.strip():
                # Разделяем по первому пробелу (имя и версия)
                parts = line.split(' ', 1)
                if len(parts) == 2:
                    name, version = parts
                    packages[name] = version
                else:
                    # Если что-то пошло не так, сохраняем всю строку как ключ
                    packages[line] = ''
        
        return {
            "success": True,
            "count": len(packages),
            "packages": packages  # теперь это словарь {name: version}
        }
    except subprocess.CalledProcessError as e:
        return {"success": False, "error": e.stderr or str(e)}
    except Exception as e:
        return {"success": False, "error": str(e)}

def main():
    response = get_rpm_packages()
    json_output = json.dumps(response, ensure_ascii=False)
    sys.stdout.buffer.write(struct.pack('<I', len(json_output.encode('utf-8'))))
    sys.stdout.buffer.write(json_output.encode('utf-8'))
    sys.stdout.buffer.flush()

if __name__ == "__main__":
    main()