import requests

from core.config import settings
from face.providers.base import FaceProvider


class ExternalFaceApiProvider(FaceProvider):
    def enroll(self, person_id: str, image_b64: str) -> dict:
        if not settings.external_face_api_url:
            return {"person_id": person_id, "provider": "external", "enrolled": False, "message": "API not configured"}
        r = requests.post(
            f"{settings.external_face_api_url}/enroll",
            headers={"Authorization": f"Bearer {settings.external_face_api_key}"},
            json={"person_id": person_id, "image_b64": image_b64},
            timeout=10,
        )
        r.raise_for_status()
        return r.json()

    def verify(self, person_id: str, image_b64: str) -> tuple[bool, float]:
        if not settings.external_face_api_url:
            return False, 0.0
        r = requests.post(
            f"{settings.external_face_api_url}/verify",
            headers={"Authorization": f"Bearer {settings.external_face_api_key}"},
            json={"person_id": person_id, "image_b64": image_b64},
            timeout=10,
        )
        r.raise_for_status()
        data = r.json()
        return bool(data.get("matched", False)), float(data.get("score", 0.0))
