#!/usr/bin/env python3
"""shiva-tdp-daemon — Daemon TDP root via socket Unix (ShivaOS Steam Edition)"""
import os, json, socket, glob

SOCK_PATH = '/run/shiva-tdp.sock'


def apply_tdp(watts):
    watts = max(4, min(watts, 35))
    epp = 'power' if watts <= 8 else 'balance_power' if watts <= 15 else 'performance'
    for p in glob.glob('/sys/class/hwmon/hwmon*/power1_cap'):
        try:
            open(p, 'w').write(str(watts * 1_000_000))
            break
        except Exception:
            pass
    for p in glob.glob('/sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference'):
        try:
            open(p, 'w').write(epp)
        except Exception:
            pass
    try:
        os.system(
            f'ryzenadj --stapm-limit={watts*1000} '
            f'--fast-limit={watts*1000} --slow-limit={watts*1000} 2>/dev/null'
        )
    except Exception:
        pass


def main():
    if os.path.exists(SOCK_PATH):
        os.unlink(SOCK_PATH)
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
    sock.bind(SOCK_PATH)
    os.chmod(SOCK_PATH, 0o666)
    while True:
        try:
            data, _ = sock.recvfrom(256)
            msg = json.loads(data.decode())
            apply_tdp(int(msg.get('watts', 15)))
        except Exception:
            pass


if __name__ == '__main__':
    main()
