"""
Tool 4 — Comparaison du bien avec le marché.
Compare le prix au m² du bien avec le prix moyen du marché.
"""

import json
import logging

logger = logging.getLogger("tools.compare_with_market")


def _parse(parametre: str) -> dict:
    try:
        return json.loads(parametre)
    except (json.JSONDecodeError, TypeError):
        logger.warning(f"Paramètre non parseable : {parametre!r}")
        return {}


def compare_with_market(parametre: str) -> dict:
    """
    Compare le prix au m² du bien avec le prix moyen du marché.

    Paramètre JSON :
        {"prix_m2_bien": number, "prix_m2_marche": number}

    Retour :
        statut      : "sous-évalué" | "prix marché" | "surévalué"
        ecart_pct   : écart en %   (positif = plus cher que le marché)
        ecart_euros : écart en €/m²
    """
    data = _parse(parametre)

    prix_bien   = data.get("prix_m2_bien")
    prix_marche = data.get("prix_m2_marche")

    if not prix_bien or not prix_marche:
        return {"erreur": "Les champs 'prix_m2_bien' et 'prix_m2_marche' sont requis."}
    if prix_marche <= 0:
        return {"erreur": "Le prix marché doit être supérieur à 0."}

    ecart_pct   = round(((prix_bien - prix_marche) / prix_marche) * 100, 1)
    ecart_euros = round(prix_bien - prix_marche, 2)

    if ecart_pct < -5:
        statut = "sous-évalué"
    elif ecart_pct > 5:
        statut = "surévalué"
    else:
        statut = "prix marché"

    result = {
        "prix_m2_bien":   prix_bien,
        "prix_m2_marche": prix_marche,
        "statut":         statut,
        "ecart_pct":      ecart_pct,
        "ecart_euros":    ecart_euros,
    }
    logger.info(f"compare_with_market → statut={statut}, écart={ecart_pct}%")
    return result
