from core.config import settings
from face.providers.external_provider import ExternalFaceApiProvider
from face.providers.local_provider import LocalEmbeddingProvider


class FaceVerificationService:
    def __init__(self) -> None:
        self.local = LocalEmbeddingProvider()
        self.external = ExternalFaceApiProvider()

    def enroll(self, person_id: str, image_b64: str) -> dict:
        mode = settings.face_provider_mode.lower()
        if mode == "external":
            return self.external.enroll(person_id, image_b64)
        if mode == "both":
            local = self.local.enroll(person_id, image_b64)
            ext = self.external.enroll(person_id, image_b64)
            return {"mode": "both", "local": local, "external": ext}
        return self.local.enroll(person_id, image_b64)

    def verify(self, person_id: str, image_b64: str) -> tuple[bool, float, str]:
        mode = settings.face_provider_mode.lower()
        if mode == "external":
            ok, score = self.external.verify(person_id, image_b64)
            return ok, score, "external"
        if mode == "both":
            ok_local, score_local = self.local.verify(person_id, image_b64)
            if ok_local:
                return ok_local, score_local, "local"
            ok_ext, score_ext = self.external.verify(person_id, image_b64)
            return ok_ext, score_ext, "external"
        ok, score = self.local.verify(person_id, image_b64)
        return ok, score, "local"
