# from fastapi import Request, Depends
# from jose import jwt, JWTError, ExpiredSignatureError
#
# from app.config import settings
# from app.exceptions import TokenExpiredException_401, TokenAbsentException_401, IncorrectTokenFormatException_401, \
#     UserNotFoundException_401
# from app.users.dao import UsersDAO
#
# from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
# from fastapi import HTTPException, status


# def get_token(request: Request):
#     token = request.cookies.get("WorkTools_token")
#     if not token:
#         raise TokenAbsentException_401
#     return token

# async def get_current_user(token: str = Depends(get_token)):
#     try:
#         payload = jwt.decode(
#             token, settings.SECRET_KEY, settings.ALGORITHM
#         )
#     except ExpiredSignatureError:
#         # Как позже выяснилось, ключ exp автоматически проверяется
#         # командой jwt.decode, поэтому отдельно проверять это не нужно
#         raise TokenExpiredException_401
#     except JWTError:
#         raise IncorrectTokenFormatException_401
#     user_id: str = payload.get("sub")
#     if not user_id:
#         raise UserNotFoundException_401
#     user = await UsersDAO.find_one_or_none(user_id=int(user_id))
#     if not user:
#         raise UserNotFoundException_401
#     return user

# oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# async def get_current_user(token: str = Depends(oauth2_scheme)):
#     credentials_exception = HTTPException(
#         status_code=status.HTTP_401_UNAUTHORIZED,
#         detail="Could not validate credentials",
#         headers={"WWW-Authenticate": "Bearer"},
#     )
#     try:
#         payload = jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])
#         user_id: str = payload.get("sub")
#         if user_id is None:
#             raise credentials_exception
#     except JWTError:
#         raise credentials_exception
#     return await UsersDAO.find_one_or_none(user_id=int(user_id))