from __future__ import annotations

from datetime import datetime
import logging


def parse_iso_datetime(dt_str: str | None, logger: logging.Logger):
    if not dt_str:
        return None, None
    try:
        if "+" in dt_str:
            dt_str = dt_str.split("+", 1)[0]
        if "Z" in dt_str:
            dt_str = dt_str.rstrip("Z")
        dt = datetime.fromisoformat(dt_str)
        return dt.date(), dt.time().replace(microsecond=0)
    except Exception:
        logger.warning("Impossible de parser la date ISO : %s", dt_str)
        return None, None


def parse_date_only(dt_str: str | None, logger: logging.Logger):
    if not dt_str:
        return None
    try:
        if "T" in dt_str:
            dt_str = dt_str.split("T", 1)[0]
        return datetime.fromisoformat(dt_str).date()
    except Exception:
        logger.warning("Impossible de parser dataSituacionAdministrativa : %s", dt_str)
        return None


def etat_to_int(etat: str | None) -> int:
    if not etat:
        return 0
    return 1 if etat.strip().lower().startswith("pech") else 0


def toxines_to_str(toxicidade) -> str | None:
    if not toxicidade:
        return None
    if isinstance(toxicidade, list):
        items = [str(item).strip() for item in toxicidade if str(item).strip()]
        return ",".join(items) if items else None
    value = str(toxicidade).strip()
    return value or None
