from .ui import *
from _typeshed import Incomplete

class DialogNode(Button):
    has_been_displayed: bool
    def __init__(self, key_name: str, font_size: int, next_keys: list[str], tag: str = ...) -> None: ...
    @property
    def next_keys(self) -> tuple[str, ...]: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class DialogNavigationWindow(AbstractFrame):
    def __init__(self, x: int_f, y: int_f, width: int_f, height: int_f, tag: str = ...) -> None: ...
    def add_node(self, key: str, next_keys: list[str]) -> None: ...
    def read_all(self, dialogs_data: dict) -> None: ...
    def update_selected(self, new_current_select: str) -> None: ...
    def get_selected_key(self) -> str: ...

class AbstractDialogBox(HidableSurface, metaclass=ABCMeta):
    def __init__(self) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...
    def update(self, narrator: str, contents: list) -> None: ...

class EditableDialogBox(AbstractDialogBox):
    def __init__(self, fontSize: int) -> None: ...
    def any_changed_was_made(self) -> bool: ...
    def get_narrator(self) -> str: ...
    def get_content(self) -> list: ...
    def update(self, narrator: Optional[str], contents: Optional[list]) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class DialogBox(AbstractDialogBox):
    class __NextPageIndicatorIcon:
        def __init__(self) -> None: ...
        def draw_to(self, _surface: ImageSurface, _x: int, _y: int, _width: int) -> None: ...
    FONT: Incomplete
    def __init__(self, fontSize: int) -> None: ...
    def reset(self) -> None: ...
    def is_all_played(self) -> bool: ...
    def play_all(self) -> None: ...
    def update(self, narrator: Optional[str], contents: Optional[list], forceNotResizeDialogueBox: bool = ...) -> None: ...
    def get_sound_volume(self) -> float: ...
    def set_sound_volume(self, volume: number) -> None: ...
    def set_playing_automatically(self, value: bool) -> None: ...
    def is_update_needed(self) -> bool: ...
    @staticmethod
    def stop_playing_text_sound() -> None: ...
    def set_visible(self, visible: bool) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class CharacterImageNameMetaData:
    def __init__(self, _name: str) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def tags(self) -> set[str]: ...
    def equal(self, otherNameData: CharacterImageNameMetaData, must_be_the_same: bool = ...) -> bool: ...
    def has_tag(self, _tag: str) -> bool: ...
    def remove_tag(self, _tag: str) -> None: ...
    def add_tag(self, _tag: str) -> None: ...
    def get_raw_name(self) -> str: ...

class _FilterEffect:
    def __init__(self, path: str, _x: int, _y: int, _width: int, _height: int) -> None: ...
    def get_rect(self) -> Rectangle: ...
    def set_crop_rect(self, rect: Optional[Rectangle]) -> None: ...
    def render(self, characterImage: StaticImage, _surface: ImageSurface, is_silent: bool) -> None: ...

class CharacterImageManager:
    dev_mode: bool
    character_get_click: Optional[str]
    @classmethod
    def init(cls) -> None: ...
    @classmethod
    def unload(cls) -> None: ...
    @classmethod
    def update(cls, characterNameList: Optional[Sequence[str]]) -> None: ...
    @classmethod
    def draw(cls, _surface: ImageSurface) -> None: ...

class DialogContent:
    background_image: Incomplete
    background_music: Incomplete
    character_images: Incomplete
    contents: Incomplete
    narrator: Incomplete
    last: Incomplete
    next: Incomplete
    notes: Incomplete
    def __init__(self, _data: dict, _id: str) -> None: ...
    @property
    def id(self) -> str: ...
    def has_next(self) -> bool: ...
    def has_multiple_next(self) -> bool: ...
    def to_dict(self) -> dict: ...

class DialogContentManager:
    def __init__(self) -> None: ...
    @property
    def previous(self) -> Optional[DialogContent]: ...
    @property
    def current(self) -> DialogContent: ...
    @property
    def last(self) -> Optional[DialogContent]: ...
    def save_current_changes(self) -> None: ...
    def is_empty(self) -> bool: ...
    def clear(self) -> None: ...
    def update(self, _data: dict[str, dict[str, dict]]) -> None: ...
    def get(self) -> dict[str, dict[str, dict]]: ...
    def get_id(self) -> str: ...
    def set_id(self, _id: str) -> None: ...
    def get_section(self) -> str: ...
    def set_section(self, _section: str) -> None: ...
    def remove_section(self, _id: Optional[str] = ...) -> None: ...
    def get_section_content(self, _section: Optional[str] = ...) -> dict: ...
    def set_section_content(self, _data: dict, _section: Optional[str] = ...) -> None: ...
    def get_dialog(self, _section: Optional[str] = ..., _id: Optional[str] = ...) -> dict: ...
    def remove_dialog(self, _section: Optional[str] = ..., _id: Optional[str] = ...) -> None: ...

class ScriptCompiler:
    FILE_EXTENSION: Final[str]
    def __init__(self) -> None: ...
    @staticmethod
    def extract_info_from_path(_path: str) -> tuple[int, str]: ...
    def load(self, path: str) -> dict: ...
    def compile(self, path: str, out_folder: str) -> None: ...
    @classmethod
    def decompile(cls, path: str, out: str) -> None: ...

class AbstractVisualNovelSystem(AbstractGameSystem, metaclass=ABCMeta):
    auto_save: bool
    def __init__(self) -> None: ...
    def get_dialog_folder_location(self) -> str: ...
    def get_dialog_file_location(self, lang: str = ...) -> str: ...
    def get_default_lang(self) -> str: ...
    def generate_a_new_recommended_key(self, index: int = ...) -> str: ...
    def load_progress(self, _data: dict) -> None: ...
    def new(self, chapterType: str, chapterId: int, section: str, projectName: Optional[str] = ..., dialogId: str = ...) -> None: ...
    def update_language(self) -> None: ...
    def stop(self) -> None: ...
    def display_background_image(self, _surface: ImageSurface) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class VisualNovelSystem(AbstractVisualNovelSystem, PauseMenuModuleForGameSystem):
    def __init__(self) -> None: ...
    def disable_basic_features(self) -> None: ...
    def enable_basic_features(self) -> None: ...
    def load_progress(self, _data: dict) -> None: ...
    def new(self, chapterType: str, chapterId: int, section: str, projectName: Optional[str] = ..., dialogId: str = ...) -> None: ...
    def update_language(self) -> None: ...
    def continue_scene(self, dialog_id: str) -> None: ...
    def play_cutscene(self, _surface: ImageSurface, fade_out_in_ms: int = ...) -> None: ...
    def display_background_image(self, _surface: ImageSurface) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class DialogEditor(AbstractVisualNovelSystem):
    def __init__(self) -> None: ...
    def new(self, chapterType: str, chapterId: int, section: str, projectName: Optional[str] = ..., dialogId: str = ...) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

def create_new_project(dir_path: str, config_type: str = ...) -> None: ...
