import time

from fastapi import FastAPI, HTTPException
from fastapi.responses import StreamingResponse

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

def generate_audio():
    try:
        for chunk in get_mp3_chunks():
            yield chunk
    except FileNotFoundError:
        # 文件不存在时，返回 404 错误
        raise HTTPException(status_code=404, detail="Audio file not found")
    except Exception as e:
        # 其他错误，返回 500 错误
        raise HTTPException(status_code=500, detail=f"An error occurred: {e}")

@app.get('/audio')
async def audio_stream():
    return StreamingResponse(generate_audio(), media_type='audio/mpeg')

def get_mp3_chunks():
    try:
        with open('assets/西海情歌-刀郎～铃声.mp3', 'rb') as f:  # 使用相对路径
            while True:
                chunk = f.read(4096)
                if not chunk:
                    break
                time.sleep(0.1)
                yield chunk
    except FileNotFoundError:
        raise  # 重新抛出异常，由 generate_audio() 函数处理