"""Neo4j GraphStore implementation (placeholder).

Full implementation requires Neo4j server.
"""
from __future__ import annotations

from .base import GraphStore


class Neo4jGraphStore(GraphStore):
    """GraphStore backed by Neo4j.

    Requires: pip install trustmem[neo4j]
    """

    def __init__(
        self,
        uri: str = "bolt://localhost:7687",
        auth: tuple[str, str] = ("neo4j", "password"),
        database: str = "neo4j",
        **kwargs,
    ) -> None:
        self._uri = uri
        self._auth = auth
        self._database = database
        raise NotImplementedError(
            "Neo4jGraphStore is not yet implemented. "
            "Use 'memory' or 'sqlite' backend instead. "
            "Contributions welcome: https://github.com/sator-inc/trustmem"
        )

    def put_node(self, node: dict) -> None:
        raise NotImplementedError

    def get_node(self, entity_id: str) -> dict | None:
        raise NotImplementedError

    def get_node_by_name(self, name: str, user_id: str | None = None) -> dict | None:
        raise NotImplementedError

    def delete_node(self, entity_id: str) -> bool:
        raise NotImplementedError

    def put_edge(self, edge: dict) -> None:
        raise NotImplementedError

    def get_edge(self, edge_id: str) -> dict | None:
        raise NotImplementedError

    def delete_edge(self, edge_id: str) -> bool:
        raise NotImplementedError

    def search_edges(
        self,
        user_id: str | None = None,
        entity_name: str = "",
        predicate: str | None = None,
        direction: str = "both",
        limit: int = 20,
        partial_match: bool = False,
    ) -> list[dict]:
        raise NotImplementedError

    def list_edges(
        self,
        user_id: str | None = None,
        limit: int = 100,
    ) -> list[dict]:
        raise NotImplementedError

    def traverse(
        self,
        user_id: str | None = None,
        start_name: str = "",
        max_hops: int = 2,
        limit_edges_per_hop: int = 100,
    ) -> tuple[list[dict], list[dict]]:
        raise NotImplementedError
