"""Utility functions for the scaffold script."""

import argparse
from typing import Any

from .const import COMPONENT_DIR


def valid_integration(integration):
    """Test if it's a valid integration."""
    if not (COMPONENT_DIR / integration).exists():
        raise argparse.ArgumentTypeError(
            f"The integration {integration} does not exist."
        )

    return integration


_MANIFEST_SORT_KEYS = {"domain": ".domain", "name": ".name"}


def _sort_manifest_keys(key: str) -> str:
    """Sort manifest keys."""
    return _MANIFEST_SORT_KEYS.get(key, key)


def sort_manifest(manifest: dict[str, Any]) -> bool:
    """Sort manifest."""
    keys = list(manifest)
    if (keys_sorted := sorted(keys, key=_sort_manifest_keys)) != keys:
        sorted_manifest = {key: manifest[key] for key in keys_sorted}
        manifest.clear()
        manifest.update(sorted_manifest)
        return True

    return False