# 3rd party dependencies
import pytest
import numpy as np

# project dependencies
from deepface import DeepFace
from deepface.commons.logger import Logger

logger = Logger()


def test_enabled_enforce_detection_for_non_facial_input():
    black_img = np.zeros([224, 224, 3])

    with pytest.raises(ValueError):
        DeepFace.represent(img_path=black_img)

    with pytest.raises(ValueError):
        DeepFace.verify(img1_path=black_img, img2_path=black_img)

    logger.info("✅ enabled enforce detection with non facial input tests done")


def test_disabled_enforce_detection_for_non_facial_input_on_represent():
    black_img = np.zeros([224, 224, 3])
    objs = DeepFace.represent(img_path=black_img, enforce_detection=False)

    assert isinstance(objs, list)
    assert len(objs) > 0
    assert isinstance(objs[0], dict)
    assert "embedding" in objs[0].keys()
    assert "facial_area" in objs[0].keys()
    assert isinstance(objs[0]["facial_area"], dict)
    assert "x" in objs[0]["facial_area"].keys()
    assert "y" in objs[0]["facial_area"].keys()
    assert "w" in objs[0]["facial_area"].keys()
    assert "h" in objs[0]["facial_area"].keys()
    assert isinstance(objs[0]["embedding"], list)
    assert len(objs[0]["embedding"]) == 4096  # embedding of VGG-Face

    logger.info("✅ disabled enforce detection with non facial input test for represent tests done")


def test_disabled_enforce_detection_for_non_facial_input_on_verify():
    black_img = np.zeros([224, 224, 3])
    obj = DeepFace.verify(img1_path=black_img, img2_path=black_img, enforce_detection=False)
    assert isinstance(obj, dict)

    logger.info("✅ disabled enforce detection with non facial input test for verify tests done")
