from typing import Any

from .typesf import File

class StorageEngine:
    @classmethod
    def load(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def store(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def delete(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def read(cls, file: File, *args, **kwargs) -> bytes | None: ...
    @classmethod
    def seek(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def cleanup(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def is_seekable(cls) -> bool: ...
    @classmethod
    def is_stored(cls) -> bool: ...
    @classmethod
    def _compute(cls, file: File, *args, **kwargs) -> None: ...

class BaseEngine(StorageEngine):
    @classmethod
    def load(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def store(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def delete(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def read(cls, file: File, *args, **kwargs) -> bytes | None: ...
    @classmethod
    def cleanup(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def is_stored(cls) -> bool: ...

class FsEngine(StorageEngine):
    @classmethod
    def store(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def load(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def delete(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def read(cls, file: File, *args, **kwargs) -> bytes | None: ...
    @classmethod
    def seek(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def cleanup(cls, file: File, *args, **kwargs) -> None: ...
    @classmethod
    def is_seekable(cls) -> bool: ...
    @classmethod
    def _compute(cls, file: File) -> None: ...
    @classmethod
    def _handle(cls, file: File) -> Any: ...
    @classmethod
    def _file_path(
        cls, file: File, ensure: bool = ..., base: str | None = ...
    ) -> str: ...
