from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def patch():
    """
    Переместим файлы пользователей, из устрареших личных проектов в папки
    """
    default_project = models.CmfProject.get(is_default=True)
    users_projects = models.CmfProject.list(project_type='section', filter=['name', 'LIKE', '%@%'])
    if not users_projects:
        return

    users_folder = models.CmfFolder.get(name='Users', tree_parent_id=default_project.id)
    if not users_folder:
        users_folder = models.CmfFolder(name='Users', tree_parent_id=default_project.id).save()

    for user_project in users_projects:
        print(f'Project {user_project}, create folder and filter')
        owner = models.CmfPerson.get(login=user_project.name, user_local=True)
        if owner:
            # Сохраняем данные только для живых пользователей
            user_folder = models.CmfFolder(name=user_project.name, tree_parent_id=users_folder.id, cmf_owner=owner).save()
            models.CmfActiveEntityFilter(
                name='Задачи', filter_parent=owner, tree_parent=user_folder, cmf_owner_id=owner).save()
            for task in models.CmfTask.list(parent_id=user_project.id, fields=['parent_id']):
                print(f'Project {user_project}, move task {task}')
                task.parent_id = owner.id
                task.save()

            for document in models.CmfDocument.list(parent_id=user_project.id, fields=['tree_parent_id']):
                print(f'Project {user_project}, move document {document}')
                document.tree_parent_id = user_folder.id
                document.save(overwrite=True)

        for user_list in models.CmfList.list(parent_id=user_project.id):
            print(f'Project {user_project}, delete list {user_list}')
            user_list.delete()

        for user_filter in models.CmfActiveEntityFilter.list(parent_id=user_project.id):
            print(f'Project {user_project}, delete filter {user_filter}')
            # почему-то очень долгий .delete(), много догружает?
            # user_filter.delete()
            user_filter.cmf_deleted = True
            user_filter.save(only_data=True)

        print(f'Project {user_project}, delete')
        user_project.delete()


if __name__ == "__main__":
    patch()
