from dataclasses import dataclass
from litestar import Litestar, get, post, delete
from litestar.exceptions import HTTPException

@dataclass
class User():
    user_id: int
    name: str
    age: int
    email: str
      
DUMMY_USER_STORE: list[User] = [
    User(user_id=1, name="John Doe", age=30, email="john.doe@example.com"),
    User(user_id=2, name="Jane Doe", age=25, email="jane.doe@example.com")
]
  
@post(path="/user")
async def create_user(data: User) -> User:
    # Logic to create a user
    user = [u for u in DUMMY_USER_STORE if u.user_id == data.user_id]
    if len(user) > 0:
        return False
    else:
        DUMMY_USER_STORE.append(data)
        return data

@get(path="/users")
async def list_users() -> list[User]:
    # Logic to list all users
    all_users = DUMMY_USER_STORE
    return all_users

@get(path="/user/{user_id:int}")
async def get_user(user_id: int) -> User:
    # Logic to retrieve a user by ID
    user = [u for u in DUMMY_USER_STORE if u.user_id == user_id]
    if len(user)==0:
        raise HTTPException(status_code=400, detail=f"user with id [{user_id}] not found")
    else:
        return user

@delete(path="/user/{user_id:int}")
async def delete_user(user_id: int) -> None:
    # Logic to delete a user by ID
    temp = DUMMY_USER_STORE.copy()
    DUMMY_USER_STORE.clear()
    for u in temp:
        if u.user_id != user_id:
            DUMMY_USER_STORE.append(u)
    return None

app = Litestar(route_handlers=[create_user, list_users, get_user, delete_user])