from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from backend.security.auth import verify_token from backend.family_device.enrollment import generate_enrollment_qr from backend.family_device.remote_actions import FamilyDeviceController router = APIRouter(prefix="/family_device", tags=["family-device-management"]) controller = FamilyDeviceController() class EnrollmentRequest(BaseModel): family_member_name: str class DeviceActionRequest(BaseModel): device_id: str @router.post("/enroll/generate_qr") async def generate_qr(request: EnrollmentRequest, token: str = Depends(verify_token)): try: qr_base64 = await generate_enrollment_qr(request.family_member_name) return {"qr_code_base64": qr_base64} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.get("/devices/list") async def list_devices(token: str = Depends(verify_token)): # In a full implementation, this would query a database table of enrolled devices. # For now, returning an empty list placeholder. return {"devices": []} @router.post("/devices/{device_id}/lock") async def lock_device(device_id: str, token: str = Depends(verify_token)): await controller.remote_lock(device_id) return {"status": "lock_command_sent"} @router.post("/devices/{device_id}/wipe_sensitive") async def wipe_sensitive(device_id: str, token: str = Depends(verify_token)): await controller.remote_wipe_sensitive_data(device_id) return {"status": "wipe_sensitive_command_sent"} @router.post("/devices/{device_id}/wipe_full") async def wipe_full(device_id: str, token: str = Depends(verify_token)): await controller.remote_wipe_full(device_id) return {"status": "wipe_full_command_sent"} @router.post("/devices/{device_id}/force_password_reset") async def force_password_reset(device_id: str, token: str = Depends(verify_token)): new_pass = await controller.force_password_reset(device_id) return {"status": "password_reset_command_sent", "new_password": new_pass} @router.post("/devices/{device_id}/locate") async def locate_device(device_id: str, token: str = Depends(verify_token)): result = await controller.locate_device(device_id) return result