#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
GPU 數據代理服務（方案 B 數據源 JSON）
- 執行 gpu_metric.py 輸出 JSON
- 在 8081 端口的 /api 路徑提供 JSON
- 供 gpu_dashboard.html 定時拉取（每 3 秒）

用法：
  python3 gpu_api_proxy.py     # 在 8081 起 JSON 服務
"""
import subprocess
import json
import sys
import os
import urllib.parse
from http.server import BaseHTTPRequestHandler, HTTPServer

BASE = os.path.dirname(os.path.abspath(__file__))
API_PATH = '/api'


class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        parsed = urllib.parse.urlparse(self.path)
        if parsed.path == API_PATH or parsed.path == API_PATH + '/':
            try:
                out = subprocess.run(
                    [sys.executable, os.path.join(BASE, 'gpu_metric.py')],
                    capture_output=True, text=True, timeout=10
                )
                data = json.loads(out.stdout.strip())
                body = json.dumps(data).encode('utf-8')
                self.send_response(200)
                self.send_header('Content-Type', 'application/json; charset=utf-8')
                self.send_header('Access-Control-Allow-Origin', '*')
                self.send_header('Content-Length', str(len(body)))
                self.end_headers()
                self.wfile.write(body)
            except Exception as e:
                body = json.dumps({'ok': False, 'err': str(e)}).encode('utf-8')
                self.send_response(500)
                self.send_header('Content-Type', 'application/json')
                self.send_header('Content-Length', str(len(body)))
                self.end_headers()
                self.wfile.write(body)
        else:
            self.send_response(404)
            self.end_headers()

    def log_message(self, fmt, *args):
        pass  # 簡化日誌


def main():
    port = 8081
    server = HTTPServer(('127.0.0.1', port), Handler)
    print(f'GPU JSON 代理服務已在 http://127.0.0.1:{port}{API_PATH} 啟動')
    server.serve_forever()


if __name__ == '__main__':
    main()
