from fastapi import APIRouter,Depends

from core.security.authentication import get_user, require_role
from schema import GenericResponse
from schema.wallet import StudentSearch, RefundGroupRequest, RefundFilter
from services.wallet import WalletService

wallet_router=APIRouter(prefix="/wallet",tags=["Wallet"])
#TODO
#   search student by name,mobile number , email_id

@wallet_router.post("/search/student")
async def search_student(request:StudentSearch,user=Depends(get_user), service:WalletService=Depends(WalletService)):
    data=service.search_student(request)
    return {"data":data}

@wallet_router.post("/refund", dependencies=[Depends(require_role('admin'))], response_model=GenericResponse)
async def initiate_refund(request: RefundGroupRequest, user=Depends(get_user), service=Depends(WalletService)):
    service.initiate_refund(request)
    return {"message": "Refund initiated successfully."}

@wallet_router.get("/", response_model=GenericResponse)
async def list_all_refund(user=Depends(get_user), service=Depends(WalletService)):
    return {"message": "Refund populated successfully.", 'data': service.fetch_all_refund()}

@wallet_router.get("/{refund_id}", response_model=GenericResponse)
async def refund_detail(refund_id: int, user=Depends(get_user), service=Depends(WalletService)):
    return {"message": "Refund populated successfully.", 'data': service.refund_detail(refund_id)}

@wallet_router.post("/refund/history", response_model=GenericResponse)
async def refund_history(request:RefundFilter,user=Depends(get_user), service=Depends(WalletService)):
    return {"message": "Refund history populated successfully.", 'data': service.get_wallet_history(request,user)}

