"""Инструменты для построения фич провайдеров."""

from __future__ import annotations

import logging
from typing import Any, Mapping

from ioc_checker.iocs import IOCType
from ioc_checker.providers import get_provider

logger = logging.getLogger(__name__)


def build_provider_features(
    indicator: IOCType, provider_results: Mapping[str, Any]
) -> dict[str, dict[str, Any]]:
    """Построить фичи провайдеров для переданного индикатора."""

    features: dict[str, dict[str, Any]] = {}
    for provider_name, payload in provider_results.items():
        provider = get_provider(provider_name)
        if not provider:
            logger.warning(
                "Провайдер %s не найден, пропускаем построение фич", provider_name
            )
            continue
        if payload is False:
            logger.warning(
                "Провайдер %s вернул ошибку, фичи построены не будут", provider_name
            )
            payload = {}
        try:
            provider_features = provider.build_features(payload, indicator=indicator)
        except Exception as exc:  # noqa: BLE001
            logger.exception(
                "Ошибка при построении фич провайдера %s: %s", provider_name, exc
            )
            continue
        features[provider_name] = provider_features
        logger.debug(
            "Построены фичи для провайдера %s по индикатору %s", provider_name, indicator
        )
    return features
