"""
房间管理 REST API
"""
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel, Field

from app.routes.auth import get_current_user
from app.schemas import ApiResponse, UserProfile
from app.game import room_manager

router = APIRouter(prefix="/api/rooms", tags=["房间"])


class CreateRoomRequest(BaseModel):
    name: str = Field(..., min_length=1, max_length=32, description="房间名称")


class JoinRoomRequest(BaseModel):
    room_id: str


@router.get("", response_model=ApiResponse)
async def list_rooms():
    """获取房间列表"""
    return ApiResponse(data=room_manager.list_rooms())


@router.post("", response_model=ApiResponse, status_code=status.HTTP_201_CREATED)
async def create_room(body: CreateRoomRequest, user: UserProfile = Depends(get_current_user)):
    room = room_manager.create_room(body.name, user.id, user.nickname)
    return ApiResponse(data=room.to_dict())


@router.post("/join", response_model=ApiResponse)
async def join_room(body: JoinRoomRequest, user: UserProfile = Depends(get_current_user)):
    room = room_manager.join_room(body.room_id, user.id, user.nickname)
    if not room:
        raise HTTPException(status_code=400, detail="房间不存在、已满或已开始游戏")
    return ApiResponse(data=room.to_dict())


@router.post("/leave", response_model=ApiResponse)
async def leave_room(body: JoinRoomRequest, user: UserProfile = Depends(get_current_user)):
    ok = room_manager.leave_room(body.room_id, user.id)
    if not ok:
        raise HTTPException(status_code=400, detail="不在该房间中")
    return ApiResponse(message="已离开房间")


@router.get("/{room_id}", response_model=ApiResponse)
async def get_room(room_id: str):
    room = room_manager.get_room(room_id)
    if not room:
        raise HTTPException(status_code=404, detail="房间不存在")
    return ApiResponse(data=room.to_dict())
