from typing import Any

import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Adw


class ViewStack:
    """
    This is a singleton.
    It is initialized with the first call of use()

    Usage:

    ViewStack.use().set_visible()

    ViewStack.use() can also be called before the data is needed. e.g. to eliminate/reduce waiting time.

    """

    _instance: "None | ViewStack" = None
    view: Adw.ViewStack

    # Make sure the VMS class is used as a singleton
    def __init__(self) -> None:
        raise RuntimeError("Call use() instead")

    @classmethod
    def use(cls: Any) -> "ViewStack":
        if cls._instance is None:
            cls._instance = cls.__new__(cls)
            cls.view = Adw.ViewStack()

        return cls._instance
