#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""机器码查看工具 - 跨平台版

优先读取 Skill 已生成的 auth_state.json 里的 machine_id，
读不到则调用 core.auth_manager.get_machine_id() 重新生成
（使用与 Skill 完全一致的 salt + AI平台 算法）。
"""

import sys
import os
import json
import subprocess

def find_auth_state():
    """在脚本所在目录向上查找 auth_state.json"""
    here = os.path.dirname(os.path.abspath(__file__)) if os.path.dirname(os.path.abspath(__file__)) else os.getcwd()
    # 优先: 当前目录 / data / auth_state.json
    p1 = os.path.join(here, "data", "auth_state.json")
    if os.path.isfile(p1): return p1
    # 次选: 上一级 / data / auth_state.json（脚本放在根目录时）
    p2 = os.path.join(os.path.dirname(here), "data", "auth_state.json")
    if os.path.isfile(p2): return p2
    return None

def get_machine_id():
    """获取与 Skill 一致的机器码"""
    # 1) 优先从 auth_state.json 读取
    state_path = find_auth_state()
    if state_path:
        try:
            with open(state_path, "r", encoding="utf-8") as f:
                state = json.load(f)
            mid = state.get("machine_id", "")
            if mid and len(mid) == 32:
                return mid
        except Exception:
            pass

    # 2) 调用 auth_manager 生成（算法与 Skill 完全一致）
    try:
        here = os.path.dirname(os.path.abspath(__file__)) if os.path.dirname(os.path.abspath(__file__)) else os.getcwd()
        sys.path.insert(0, here)
        from core.auth_manager import get_machine_id as _gmid
        return _gmid()
    except Exception as e:
        print(f"  无法通过 auth_manager 获取机器码: {e}", file=sys.stderr)
        print("  请将本脚本放到 MC Skill 安装目录下运行", file=sys.stderr)
        sys.exit(1)

def copy_to_clipboard(text):
    try:
        if sys.platform == "win32":
            subprocess.run("clip", input=text, capture_output=True, text=True)
            return True
        elif sys.platform == "darwin":
            subprocess.run("pbcopy", input=text, capture_output=True, text=True)
            return True
        elif sys.platform.startswith("linux"):
            subprocess.run(["xclip", "-selection", "clipboard"], input=text, capture_output=True, text=True)
            return True
    except Exception:
        pass
    return False

def main():
    machine_id = get_machine_id()

    print()
    print("=" * 60)
    print("  您的机器码:")
    print("=" * 60)
    print()
    print(f"  {machine_id}")
    print()
    print("=" * 60)
    print()

    if copy_to_clipboard(machine_id):
        print("  已自动复制到剪贴板")
    else:
        print("  请手动复制上面的机器码")

    print()
    print("  提示: 请妥善保管此机器码，查询套餐状态时需要用到。")
    print()

if __name__ == "__main__":
    main()
