from typing import Annotated
from fastapi import APIRouter, BackgroundTasks, Depends
from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.orm import Session
from app.api.user import service
from app.database.main.mysql import get_db
from .schemas import ForgotPasswordRequest, UserCreate, UserPassUpdate, UserResponse, VerifyOTPRequest
from app.dependency.authantication import get_current_user, JWTPayloadSchema

user_router = APIRouter()

# oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/FASTAPI/user/login")
# pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

@user_router.post("/user", response_model_exclude_none=True)
async def create_user(request: UserCreate,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.UserService(db,token).create_user(request)

@user_router.post("/user/login",response_model_exclude_none=True)
async def login_user(credentials: Annotated[OAuth2PasswordRequestForm, Depends()],db: Session = Depends(get_db)):
    return await service.UserService.user_login(credentials, db)

@user_router.get("/user-info",response_model=UserResponse, response_model_exclude_none=True)
async def get_demo_user(db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.UserService(db, token).get_demo_user()

@user_router.post("/user/logout",response_model_exclude_none=True)
async def logout_user(db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.UserService(db,token).logout()

@user_router.put("/user_change_pass/update", response_model_exclude_none=True)
async def update_admin(request: UserPassUpdate,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user),):
    return await service.UserService(db, token).update_pass(request)

# @user_router.delete("/user/{user_id}", response_model_exclude_none=True)
# async def delete_user(user_id: int, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
#     return await service.UserService(db,token).delete_user(user_id)

# @user_router.get("/user-details/{user_id}", response_model_exclude_none=True)
# async def get_user_details(user_id:int,db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
#     return await service.UserService(db, token).fetch_user(user_id)

@user_router.post("/forgot-password")
async def forgot_password(request: ForgotPasswordRequest, background_tasks: BackgroundTasks, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.UserService(db,token).forgot_password_service(request, background_tasks)

@user_router.post("/reset-password")
def reset_password(request: VerifyOTPRequest, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return service.UserService(db,token).reset_password_service(request)









