"""AsusRouter helpers module."""

from __future__ import annotations

import re
from typing import Any


def clean_dict(raw: dict[str, Any]) -> dict[str, Any]:
    """Clean dictionary from None values."""

    return {
        k: v for k, v in raw.items() if v is not None or k.endswith("state")
    }


def flatten_dict(obj: Any, keystring: str = "", delimiter: str = "_"):
    """Flatten dictionary."""

    if isinstance(obj, dict):
        keystring = keystring + delimiter if keystring else keystring
        for key in obj:
            yield from flatten_dict(obj[key], keystring + str(key))
    else:
        yield keystring, obj


def as_dict(pyobj):
    """Return generator object as dictionary."""

    return dict(pyobj)


def list_from_dict(raw: dict[str, Any]) -> list[str]:
    """Return dictionary keys as list."""

    return list(raw.keys())


def to_unique_id(raw: str):
    """Convert string to unique_id."""

    string = (
        re.sub(r"(?<=[a-z0-9:_])(?=[A-Z])|[^a-zA-Z0-9:_]", " ", raw)
        .strip()
        .replace(" ", "_")
    )
    result = "".join(string.lower())
    while "__" in result:
        result = result.replace("__", "_")

    return result
