# Copyright (c) 2015 Ultimaker B.V.
# Copyright (c) 2013 David Braam
# Uranium is released under the terms of the LGPLv3 or higher.

from UM.Logger import Logger
from cura.ReaderWriters.ProfileWriter import ProfileWriter
import zipfile

class CuraProfileWriter(ProfileWriter):
    """Writes profiles to Cura's own profile format with config files."""

    def write(self, path, profiles):
        """Writes a profile to the specified file path.

        :param path: :type{string} The file to output to.
        :param profiles: :type{Profile} :type{List} The profile(s) to write to that file.
        :return: True if the writing was successful, or
                 False if it wasn't.
        """

        if type(profiles) != list:
            profiles = [profiles]

        stream = open(path, "wb")  # Open file for writing in binary.
        archive = zipfile.ZipFile(stream, "w", compression=zipfile.ZIP_DEFLATED)
        try:
            # Open the specified file.
            for profile in profiles:
                serialized = profile.serialize()
                profile_file = zipfile.ZipInfo(profile.getId())
                archive.writestr(profile_file, serialized)
        except Exception as e:
            Logger.log("e", "Failed to write profile to %s: %s", path, str(e))
            return False
        finally:
            archive.close()
        return True
