from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def patch_scaffold():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202402140814_fix_system_security_levels )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    # Патч пересоздан
    exit(0)
    system_ppp_is_changed = False
    s = models.CmfProjectPermScheme.get(code='system:default')
    for sr in models.CmfProjectPermSchemeRule.list(parent=s, fields=['cmf_modified_by']):
        if sr.cmf_modified_by != models.CmfPerson.system_person():
            system_ppp_is_changed = True
            print('Схема по-умолчанию изменена, не обрабатываем автоматически флаг disable_simple_perm!')

    old_delfault = models.CmfProjectPermScheme.get(code='system:default')
    old_delfault.system = False
    old_delfault.code = 'old_system202403:default'
    old_delfault.save(only_data=True)

    from cmf.system_data import scaffold_project_perm
    print('scaffold_project_perm')
    scaffold_project_perm()

    # 	если старая схема из коробки не исправлена и у проекта она стоит
    # 		если не стоит disable_simple_perm, то
    # 			ставим ограниченную схему
    # 		иначе
    # 			ставим открытую схему
    # 		конецесли
    # 	концесли
    if not system_ppp_is_changed:
        for project in models.CmfProject.list(filter=['project_perm_scheme.code', '=', 'system:default'],
                                              fields=['disable_simple_perm']):
            if project.disable_simple_perm:
                project.project_perm_scheme = models.CmfProjectPermScheme.get(code='system.open:default')
            else:
                project.project_perm_scheme = models.CmfProjectPermScheme.get(code='system.limited:default')
            project.save(only_data=True)


if __name__ == "__main__":
    patch_scaffold()
