from pathlib import Path
import contextlib
import os
from datetime import timedelta, datetime
from zipfile import ZipFile

class local_dir_remote:
    def __init__(self, config):
        self.config = config
        self.path = config["path"]

    def list_dir(self, recursive_search = False):
        path = Path(self.path)
        file_list = []
        delta = timedelta(minutes=2)
        glob_pattern = '*'
        glob_pattern_recursive = '**'
        if not recursive_search:
            #os.
            for file_demo in list(path.glob(glob_pattern)):
                mtime = datetime.fromtimestamp(os.stat(file_demo).st_mtime)
                if mtime < datetime.now() - delta:
                    file_list.append(file_demo)
        else:
            for file_directory in list(path.glob(glob_pattern_recursive)):
                try:
                    for files in list(file_directory.glob(glob_pattern)):
                        if '/maps' in str(files):
                            continue
                        file_list.append(files)
                except PermissionError:
                    continue
        return file_list

    def zip_local_directory(self, job):
        source_files = self.list_dir(True)
        zipname = f'{job["zipname"]}-{str(datetime.now()).split(" ")[0]}.zip'
        with ZipFile(zipname, 'w') as myzip:
            for files in source_files:
                try:
                    myzip.write(files)
                except PermissionError:
                    continue
        return str(Path.cwd()) + '/' +  zipname

    def delete_local_demo(self, pathfile):
        with contextlib.suppress(FileNotFoundError):
            if str(pathfile).endswith('.dem'):
                os.remove(pathfile)
                print('removed demo: ', pathfile)

    def delete_local_zip(self, zip_file_path):
        with contextlib.suppress(FileNotFoundError):
            if (str(zip_file_path).endswith('.zip')):
                os.remove(zip_file_path)
                print('removed zip: ', zip_file_path)