# This file is part of Gajim.
#
# SPDX-License-Identifier: GPL-3.0-only

from __future__ import annotations

from typing import Any
from typing import Generic
from typing import TypeVar

from gi.repository import Gio
from gi.repository import GObject
from gi.repository import Gtk


class BaseCompletionListItem:
    def get_text(self) -> str:
        raise NotImplementedError


L = TypeVar("L", bound=BaseCompletionListItem)


class BaseCompletionViewItem(Generic[L]):
    css_class = ""

    def __init__(self) -> None:
        self._bindings: list[GObject.Binding] = []

    def bind(self, obj: L) -> None:
        raise NotImplementedError

    def unbind(self) -> None:
        raise NotImplementedError

    def do_unroot(self) -> None:
        raise NotImplementedError


class BaseCompletionProvider:
    trigger_char = ""
    name = ""

    def get_model(self) -> tuple[Gio.ListModel[Any], type[BaseCompletionViewItem[Any]]]:
        raise NotImplementedError

    def check(self, candidate: str, start_iter: Gtk.TextIter) -> bool:
        raise NotImplementedError

    def populate(self, candidate: str, contact: Any) -> bool:
        raise NotImplementedError
