from fastapi import FastAPI
import uvicorn
import asyncio
from pyngrok import ngrok, conf
import threading
#
# 設定
FASTAPI_PORT = 7861
NGROK_AUTHTOKEN = "2fAuM2mXP4rwyzcb6T7EjY8zkL6_4mkaaSLXVpf1enNc8c3Ff"

# FastAPI アプリ
app = FastAPI()

@app.get("/")
def root():
    print("📍 エンドポイント hit!")
    return {"message": "Hello from FastAPI with ngrok!"}

# ngrok 起動スレッド
def start_ngrok():
    conf.get_default().auth_token = NGROK_AUTHTOKEN
    public_url = ngrok.connect(FASTAPI_PORT)
    print(f"🚪 公開URL: {public_url}")

threading.Thread(target=start_ngrok, daemon=True).start()

# 非同期で uvicorn サーバーを起動(VSCodeでも例のエラーが出ない方法)
async def start_server():
    config = uvicorn.Config(app=app, host="0.0.0.0", port=FASTAPI_PORT)
    server = uvicorn.Server(config)
    await server.serve()

# すでにイベントループが動いてるか確認して処理を分ける
try:
    asyncio.get_running_loop().create_task(start_server())
except RuntimeError:
    asyncio.run(start_server())