# (C) Copyright 2007-2020 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!

import os
import shutil
import tempfile


class ETSConfigPatcher(object):
    """
    Object that patches the directories in ETSConfig, to avoid having
    tests write to the home directory.
    """

    def __init__(self):
        from traits.etsconfig.api import ETSConfig

        self.etsconfig = ETSConfig

        self.tmpdir = None
        self.old_application_data = None
        self.old_application_home = None
        self.old_user_data = None

    def start(self):
        tmpdir = self.tmpdir = tempfile.mkdtemp()

        self.old_application_data = self.etsconfig._application_data
        self.etsconfig._application_data = os.path.join(
            tmpdir, "application_data"
        )

        self.old_application_home = self.etsconfig._application_home
        self.etsconfig._application_home = os.path.join(
            tmpdir, "application_home"
        )

        self.old_user_data = self.etsconfig._user_data
        self.etsconfig._user_data = os.path.join(tmpdir, "user_home")

    def stop(self):
        if self.old_user_data is not None:
            self.etsconfig._user_data = self.old_user_data
            self.old_user_data = None

        if self.old_application_home is not None:
            self.etsconfig._application_home = self.old_application_home
            self.old_application_home = None

        if self.old_application_data is not None:
            self.etsconfig._application_data = self.old_application_data
            self.old_application_data = None

        if self.tmpdir is not None:
            shutil.rmtree(self.tmpdir)
            self.tmpdir = None
