import requests
import hashlib
import subprocess
import os

class JAuth:
    """
    JAuth Python SDK (KeyAuth compatible signature)
    Usage:
        jauth = JAuth(name="Temp Woofer v2", ownerid="usr_xxx", version="1.0", url="https://jauth.site/api/v1/")
        jauth.init()
        if jauth.license(user_key):
            print("Logged in!")
    """
    def __init__(self, name, ownerid, version="1.0", url="https://jauth.site/api/v1/", secret=""):
        self.name = name
        self.ownerid = ownerid
        self.version = version
        self.url = url.rstrip('/')
        self.secret = secret
        self.sessionid = None
        self.data = {}

    @staticmethod
    def get_hwid():
        try:
            if os.name == 'nt':
                cmd = 'wmic csproduct get uuid'
                uuid = subprocess.check_output(cmd, shell=True).decode().split('\n')[1].strip()
                return hashlib.sha256(uuid.encode()).hexdigest()
            else:
                return hashlib.sha256(os.uname().nodename.encode()).hexdigest()
        except Exception:
            return "UNKNOWN_HWID"

    def init(self):
        try:
            payload = {
                "name": self.name,
                "ownerid": self.ownerid,
                "version": self.version,
                "secret": self.secret
            }
            res = requests.post(f"{self.url}/init", json=payload, timeout=8).json()
            if res.get("success"):
                self.sessionid = res.get("sessionid")
                return True
            else:
                print(f"[JAuth Error]: {res.get('message')}")
                return False
        except Exception as e:
            print(f"[JAuth Connection Error]: {e}")
            return False

    def license(self, key):
        try:
            payload = {
                "name": self.name,
                "ownerid": self.ownerid,
                "key": key.strip(),
                "hwid": self.get_hwid(),
                "sessionid": self.sessionid
            }
            res = requests.post(f"{self.url}/license", json=payload, timeout=8).json()
            if res.get("success"):
                self.data = res.get("info", {})
                return True
            else:
                self.error_message = res.get("message")
                return False
        except Exception as e:
            self.error_message = str(e)
            return False
