"""Dictionary loading for the keyboard cooperative word game."""

from __future__ import annotations

import json
import logging
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from pathlib import Path

_logger = logging.getLogger(__name__)

_FALLBACK_DICTIONARY = {
    "cat",
    "dog",
    "car",
    "bat",
    "rat",
    "hat",
    "mat",
    "sat",
    "fat",
    "pat",
    "the",
    "and",
    "for",
    "are",
    "but",
    "not",
    "you",
    "all",
    "can",
    "had",
    "her",
    "was",
    "one",
    "our",
    "out",
    "day",
    "get",
    "has",
    "him",
    "his",
    "how",
    "man",
    "new",
    "now",
    "old",
    "see",
    "two",
    "way",
    "who",
    "boy",
    "work",
    "know",
    "place",
    "year",
    "live",
    "me",
    "back",
    "give",
    "good",
}


def load_dictionary(dictionary_dir: Path) -> set[str]:
    """Load dictionary from words_dictionary.json file.

    Args:
        dictionary_dir: Directory containing words_dictionary.json.

    Returns:
        Set of valid English words.
    """
    try:
        dictionary_path = dictionary_dir / "words_dictionary.json"
        with dictionary_path.open(encoding="utf-8") as f:
            dictionary_data = json.load(f)
        # Convert to set for faster lookup (we only need the keys)
        return set(dictionary_data.keys())
    except FileNotFoundError:
        _logger.warning("words_dictionary.json not found, using fallback dictionary")
        return set(_FALLBACK_DICTIONARY)
    except json.JSONDecodeError:
        _logger.warning(
            "Error reading words_dictionary.json, using fallback dictionary"
        )
        return set(_FALLBACK_DICTIONARY)
