"""
Fonctions d'aide pour créer des Finding avec traduction automatique.
"""

from typing import Dict, Any, Optional

from ..model import Finding
from . import get_translation_dict


def _format_value(template: Optional[str], params: Dict[str, Any]) -> Optional[str]:
    if template is None:
        return None
    if not params:
        return template
    try:
        return template.format(**params)
    except KeyError:
        return template


def create_translated_finding(
    check: str,
    i18n_key: str,
    severity: str,
    i18n_params: Optional[Dict[str, Any]] = None,
    impact: Optional[str] = None,
    evidence: Optional[str] = None
) -> Finding:
    """
    Crée un Finding avec traduction automatique basée sur la clé i18n.
    
    Args:
        check: Type de vérification (ex: "source-code")
        i18n_key: Clé de traduction (ex: "sast.php.sql_injection")  
        severity: Niveau de sévérité
        i18n_params: Paramètres pour la traduction
        impact: Impact optionnel (déjà traduit ou généré via t())
        evidence: Preuves optionnelles (déjà traduites ou générées via t())
    
    Returns:
        Finding avec texte traduit automatiquement
    """
    translations = get_translation_dict(i18n_key)
    params = i18n_params or {}

    title = _format_value(translations.get("title"), params) or translations["title"]
    description = _format_value(translations.get("description"), params) or translations["description"]
    remediation = _format_value(translations.get("remediation"), params) or translations["remediation"]

    translated_impact = _format_value(translations.get("impact"), params)
    translated_evidence = _format_value(translations.get("evidence"), params)

    impact_value = translated_impact if translated_impact is not None else impact
    evidence_value = translated_evidence if translated_evidence is not None else evidence

    return Finding(
        check=check,
        title=title,
        severity=severity,
        description=description,
        remediation=remediation,
        impact=impact_value,
        evidence=evidence_value,
        i18n_key=i18n_key,
        i18n_params=i18n_params
    )
