"""
This type stub file was generated by pyright.
"""

from enum import IntEnum, StrEnum
from typing import NamedTuple, TYPE_CHECKING
from graph_sitter.core.dataclasses.usage import Usage

if TYPE_CHECKING:
    ...
class NodeType(IntEnum):
    """NodeType is an enumeration class that defines different types of nodes within the graph."""
    REPO = ...
    FILE = ...
    IMPORT = ...
    EXPORT = ...
    SYMBOL = ...
    EXTERNAL = ...
    EXPRESSION = ...


class FileGraphNodeType(IntEnum):
    STATEMENT = ...
    EXPRESSION = ...


class FileGraphEdgeType(IntEnum):
    STATEMENT_CONTAINS_EXPRESSION = ...


class EdgeType(IntEnum):
    IMPORT_SYMBOL_RESOLUTION = ...
    EXPORT = ...
    SUBCLASS = ...
    SYMBOL_USAGE = ...


class SymbolType(IntEnum):
    """TODO: names should be all uppercase"""
    Function = ...
    Class = ...
    GlobalVar = ...
    Interface = ...
    Type = ...
    Enum = ...
    Namespace = ...


class ImportType(IntEnum):
    """Import types for each import object. Determines what the import resolves to, and what symbols are imported."""
    DEFAULT_EXPORT = ...
    NAMED_EXPORT = ...
    WILDCARD = ...
    MODULE = ...
    SIDE_EFFECT = ...
    UNKNOWN = ...


class ProgrammingLanguage(StrEnum):
    PYTHON = ...
    TYPESCRIPT = ...
    UNSUPPORTED = ...


class Edge(NamedTuple):
    type: EdgeType
    usage: Usage | None
    ...


