from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.api.admin.schemas import AdminCreate, AdminResponse, AdminUpdate, ChangePasswordRequest
from app.api.admin.service import AdminService
from app.database.main.mysql import get_db
from app.dependency.authantication import JWTManager
from app.utils.schemas_utils import CustomResponse

admin_router = APIRouter()
blacklisted_tokens = set() 

@admin_router.post("/admin", response_model_exclude_none=True)
async def create_admin(request: AdminCreate,db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await AdminService(db, token).create_admin(request)

@admin_router.get("/admin/profile", response_model_exclude_none=True)
async def get_admin_profile(db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await AdminService(db, token).get_admin_profile()

@admin_router.get("/adminss", response_model=list[AdminResponse], response_model_exclude_none=True)
async def get_all_admins(db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await AdminService(db, token).get_all_admins()

@admin_router.put("/admin/change_password")
async def change_password(request: ChangePasswordRequest,db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await AdminService(db, token).change_password(request)

@admin_router.post("/logout")
async def logout(db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    jti = token.get("jti")
    blacklisted_tokens.add(jti)
    return CustomResponse(status="1", message="Logout successful.")

@admin_router.put("/admin/update", response_model=CustomResponse, response_model_exclude_none=True)
async def update_admin(request: AdminUpdate,db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await AdminService(db, token).update_admin(request)