__author__ = u'schmatz'
import configuration
import os
import sys
import errors
import shutil
class DirectoryController(object):
    def __init__(self,config):
        assert isinstance(config,configuration.Configuration)
        self.config = config
        self.root_dir = self.config.system.get_current_working_directory()

    @property
    def root_install_directory(self):
        return self.root_dir + os.sep + "coco" + os.sep + "bin"
    @property
    def tmp_directory(self):
        return self.root_install_directory + os.sep + u"tmp"
    @property
    def bin_directory(self):
        return self.root_install_directory

    def mkdir(self, path):
        if os.path.exists(path):
            print(u"Skipping creation of " + path + " because it exists.")
        else:
            os.mkdir(path)
        
    def create_directory_in_tmp(self,subdirectory):
        path = self.generate_path_for_directory_in_tmp(subdirectory)
        self.mkdir(path)

    def generate_path_for_directory_in_tmp(self,subdirectory):
        return self.tmp_directory + os.sep + subdirectory
    def create_directory_in_bin(self,subdirectory):
        full_path = self.bin_directory + os.sep + subdirectory
        self.mkdir(full_path)

    def create_base_directories(self):
        shutil.rmtree(self.root_dir + os.sep + "coco" + os.sep + "node_modules",ignore_errors=True) #just in case
        try:
            if os.path.exists(self.tmp_directory):
                self.remove_tmp_directory()
            os.mkdir(self.tmp_directory)
        except:
            raise errors.CoCoError(u"There was an error creating the directory structure, do you have correct permissions? Please remove all and start over.")

    def remove_directories(self):
        shutil.rmtree(self.bin_directory + os.sep + "node",ignore_errors=True)
        shutil.rmtree(self.bin_directory + os.sep + "mongo",ignore_errors=True)
    def remove_tmp_directory(self):
        shutil.rmtree(self.tmp_directory)