import json
import logging
import subprocess
import sys
import os
from pathlib import Path
import urllib.parse

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger("audio_launcher")

def find_chrome_executable():
    """在常見的路徑中尋找 Chrome 或 Edge 執行檔。"""
    candidates = []
    if sys.platform == "win32":
        # 為 Chrome 和 Edge 新增 Program Files 和 Program Files (x86) 的路徑
        program_files = os.environ.get("ProgramFiles", "C:\\Program Files")
        program_files_x86 = os.environ.get("ProgramFiles(x86)", "C:\\Program Files (x86)")
        
        candidates.extend([
            Path(program_files) / "Google/Chrome/Application/chrome.exe",
            Path(program_files_x86) / "Google/Chrome/Application/chrome.exe",
            Path(program_files) / "Microsoft/Edge/Application/msedge.exe",
            Path(program_files_x86) / "Microsoft/Edge/Application/msedge.exe",
        ])
    elif sys.platform == "darwin":  # macOS
        candidates.append(Path("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"))
        candidates.append(Path("/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"))
    else:  # Linux
        candidates.extend([
            Path("/usr/bin/google-chrome"),
            Path("/usr/bin/microsoft-edge"),
            Path("/usr/bin/chromium-browser"),
        ])

    for path in candidates:
        if path.exists():
            logger.info(f"找到瀏覽器執行檔: {path}")
            return str(path)

    logger.error("找不到任何相容的瀏覽器 (Chrome, Edge, Chromium)。")
    return None

def main():
    # 載入設定檔
    try:
        with open("config.json", 'r', encoding='utf-8') as f:
            config = json.load(f)
    except (FileNotFoundError, json.JSONDecodeError) as e:
        logger.error(f"錯誤：無法載入 config.json。 {e}")
        return

    # 尋找瀏覽器
    browser_path = find_chrome_executable()
    if not browser_path:
        return

    # 準備 URL 參數
    sharer_info = config.get("sharer_info", {})
    sharer_id = sharer_info.get("id")
    password = sharer_info.get("password")

    # 建立完整的播放器 URL
    # 這裡我們假設 audio_player.html 與你的信令伺服器在同一個網域下
    # 如果不是，請修改 base_url
    conn_config = config.get("connection", {})
    protocol = "https" if conn_config.get("secure", False) else "http"
    host = conn_config.get("host", "localhost")
    base_url = f"{protocol}://{host}/audio_player.html"
    
    params = {'sharerId': sharer_id, 'password': password}
    player_url = f"{base_url}?{urllib.parse.urlencode(params)}"

    logger.info(f"準備啟動瀏覽器並導向: {player_url}")

    # 準備啟動參數
    args = [
        browser_path,
        "--app=" + player_url,  # 使用 App 模式，更像一個獨立應用
        "--autoplay-policy=no-user-gesture-required", # 允許無使用者互動的自動播放
        "--window-size=400,300", # 給它一個小視窗
    ]

    logger.info("正在啟動瀏覽器播放器...")
    subprocess.Popen(args)
    logger.info("瀏覽器播放器已啟動。此腳本將會結束。")

if __name__ == "__main__":
    main()