#!/usr/bin/env python3
"""一键启动 WebApp：生成 Token -> 打开浏览器 -> HTTP 服务"""
import os
import sys
import datetime
import webbrowser
import http.server
import socketserver
from dotenv import load_dotenv
from livekit import api

# 加载同目录下的 .env 文件
dotenv_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env")
load_dotenv(dotenv_path)

ROOM = "jarvis-voice"
IDENTITY = "arch-coder"

# 使用局域网 IP
DEFAULT_HOST_IP = "192.168.31.124"
WS_URL = os.getenv("LIVEKIT_URL", f"ws://{DEFAULT_HOST_IP}:7880")
PORT = 18080

api_key = os.getenv("LIVEKIT_API_KEY")
api_secret = os.getenv("LIVEKIT_API_SECRET")

if not api_key or not api_secret:
    print("错误：未在 .env 中找到 LIVEKIT_API_KEY 或 LIVEKIT_API_SECRET！")
    sys.exit(1)

# 使用安全的强密钥签发 Token（一年有效期，对齐 jarvis-voice 房间）
token = (api.AccessToken(api_key, api_secret)
         .with_identity(IDENTITY)
         .with_name(IDENTITY)
         .with_grants(api.VideoGrants(room_join=True, room=ROOM))
         .with_ttl(datetime.timedelta(days=365))
         .to_jwt())

print(f"Token: {token[:50]}...")
url = f"http://{DEFAULT_HOST_IP}:{PORT}/webapp.html?token={token}&url={WS_URL}"

# 仅在非 Systemd 托管环境下（无 INVOCATION_ID）尝试自动调起外部浏览器
if not os.getenv("INVOCATION_ID"):
    print("检测到手动终端启动，正在打开本地浏览器...")
    webbrowser.open(url)
else:
    print("检测到 Systemd 服务后台启动，跳过本地浏览器打开。")

os.chdir(os.path.dirname(os.path.abspath(__file__)))
socketserver.TCPServer.allow_reuse_address = True
with socketserver.TCPServer(("", PORT), http.server.SimpleHTTPRequestHandler) as httpd:
    print(f"WebApp 服务已启动：http://{DEFAULT_HOST_IP}:{PORT}")
    httpd.serve_forever()
