from typing import List
from typing import Callable
from typing import Tuple


def classify_annotations(
    confidences: List[float], condition: Callable[..., bool], class_if_true: str, class_if_false: str
) -> Tuple[List[str], int, int]:
    """
    Classifies annotations based on a condition.

    :param confidences: A list of confidences.
    :param condition: A function that takes a confidence and returns a boolean.
    :param class_if_true: The class to assign to the annotations that satisfy the condition.
    :param class_if_false: The class to assign to the annotations that do not satisfy the condition.
    :return: A tuple containing:
        - A list of classifications.
        - The number of positive classifications.
        - The number of negative classifications.
    """

    classifications = []
    num_positive_classifications = 0
    num_negative_classifications = 0

    for confidence in confidences:
        if condition(confidence):
            classification = class_if_true
            num_positive_classifications += 1
        else:
            classification = class_if_false
            num_negative_classifications += 1
        classifications.append(classification)

    return classifications, num_positive_classifications, num_negative_classifications