from .Window import Window, InternalWindow
from .Camera import Camera
from .Constants import All

__all__ = ["_temp", "init", "update", "SetLogicClock", "GetLogicClock", "OpenUrl",
           "AllEvents", "QuitEvent", "WindowEvents", "AutoCalcs2D",
           "_calculate_size", "_calculate_location", "_calculate_object2d", "_calculate_line", "_calculate_collision_bounds"]

class _temp:
    LogicClock: int

    mouse_motion_tick_time: dict

    Time: dict

    Events: list

    KeyboardState: any
    KeyboardCache: list

    MouseButtons: list
    MousePosition: list
    Mouse: dict

    MouseCursor: int

    MouseCursors: list

    Button: dict

def init(video: bool = True, audio: bool = False, events: bool = True, controller: bool = False, sensor: bool = False): ...

def update(): ...

def SetLogicClock(logic_clock: int): ...

def GetLogicClock() -> int: ...

def OpenUrl(url: str): ...

def AllEvents() -> list: ...

def QuitEvent() -> bool: ...

def WindowEvents(window: int = All, event: int = All): ...

class AutoCalcs2D:
    @staticmethod
    def Percent(percent: int): ...

    @staticmethod
    def Center(): ...

def _calculate_size(location: tuple[int, int] | list[int, int], size: tuple[int, int] | list[int, int], size_window: tuple[int, int] | list[int, int], scale: tuple[int, int] | list[int, int]) -> list: ...

def _calculate_location(location: tuple[int, int] | list[int, int], size: tuple[int, int] | list[int, int], size_window: tuple[int, int] | list[int, int], scale: tuple[int, int] | list[int, int]) -> list: ...

def _calculate_pivot(location: tuple[int, int] | list[int, int], size: tuple[int, int] | list[int, int], pivot) -> tuple: ...

def _calculate_object2d(location: tuple[int, int] | list[int, int], size: tuple[int, int] | list[int, int], rotation, scale: tuple[int, int] | list[int, int], window: Window | InternalWindow, camera: Camera | None, pivot) -> tuple[bool, tuple[int, int], tuple[int, int]]: ...

def _calculate_line(start: tuple[int, int] | list[int, int], end: tuple[int, int] | list[int, int], size: int, window: Window | InternalWindow, camera: Camera | None) -> tuple[bool, tuple[int, int], tuple[int, int], int]: ...

def _calculate_collision_bounds(location: tuple[int, int] | list[int, int], size: tuple[int, int] | list[int, int], obj_size, obj_location, pivot) -> tuple[tuple[int, int], tuple[int, int]]: ...
