#
# A template class representing the interactions that the end-user has
# with the filesystem in a z-machine.
#
# Third-party programs are expected to subclass ZFilesystem and
# override all the methods, then pass an instance of their class to be
# driven by the main z-machine engine.
#
# For the license of this file, please consult the LICENSE file in the
# root directory of this distribution.
#


class ZFilesystem:
    """Encapsulates the interactions that the end-user has with the
    filesystem."""

    def save_game(self, data, suggested_filename=None):
        """Prompt for a filename (possibly using suggested_filename), and
        attempt to write DATA as a saved-game file.  Return True on
        success, False on failure.

        Note that file-handling errors such as 'disc corrupt' and 'disc
        full' should be reported directly to the player by the method in
        question method, and they should also cause this function to
        return False.  If the user clicks 'cancel' or its equivalent,
        this function should return False."""

        raise NotImplementedError()

    def restore_game(self):
        """Prompt for a filename, and return file's contents.  (Presumably
        the interpreter will attempt to use those contents to restore a
        saved game.)  Returns None on failure.

        Note that file-handling errors such as 'disc corrupt' and 'disc
        full' should be reported directly to the player by the method in
        question method, and they should also cause this function to
        return None. The error 'file not found' should cause this function
        to return None.  If the user clicks 'cancel' or its equivalent,
        this function should return None."""

        raise NotImplementedError()

    def open_transcript_file_for_writing(self):
        """Prompt for a filename in which to save either a full game
        transcript or just a list of the user's commands.  Return standard
        python file object that can be written to.

        If an error occurs, or if the user clicks 'cancel' or its
        equivalent, return None."""

        raise NotImplementedError()

    def open_transcript_file_for_reading(self):
        """Prompt for a filename contain user commands, which can be used
        to drive the interpreter.  Return standard python file object that
        can be read from.

        If an error occurs, or if the user clicks 'cancel' or its
        equivalent, return None."""

        raise NotImplementedError()
