from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def fix():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202403221154_rename_pr_admin )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    from cmf.system_data import init_system_users, scaffold_project_perm
    print('init_system_users')
    init_system_users()
    commit_with_event()

    print('Rename ProjectAdmins')
    project_admin_group = models.CmfPersonGroup.get(filter=['code', '==', 'ProjectAdmins'])
    project_admin_group.name = "Администраторы проектов"
    project_admin_group.text = "Администраторы проектов"
    project_admin_group.save(notify=False, only_data=True)
    commit_with_event()

    # print('scaffold_project_perm')
    # scaffold_project_perm()
    # commit_with_event()

    print('Set cmf_project_admins')
    i = 0
    while True:
        pr_list = models.CmfProject.list(slice=[i, i + 10],
                                           fields=['cmf_owner', 'cmf_owner_assistants', 'cmf_project_admins'],
                                           order_by=['cmf_created_at'],
                                           include_deleted=True)
        if not pr_list:
            break

        for pr in pr_list:
            if pr.cmf_project_admins:
                continue
            if pr.cmf_owner:
                pr.cmf_project_admins.append(pr.cmf_owner)
            for owner_assistant in pr.cmf_owner_assistants:
                pr.cmf_project_admins.append(owner_assistant)
            pr.save(only_data=True)
        i += 10
        commit_with_event()

    print('Copy ProjectAdmins members to ProjectCreators')
    project_creators_group = models.CmfPersonGroup.get(filter=['code', '==', 'ProjectCreators'], fields=['rg_members'])
    project_admin_group = models.CmfPersonGroup.get(filter=['code', '==', 'ProjectAdmins'], fields=['rg_members'])
    for member in project_admin_group.rg_members:
        if member not in project_creators_group.rg_members and member != project_creators_group:
            project_creators_group.rg_members.append(member)
    project_creators_group.save()
    commit_with_event()

if __name__ == "__main__":
    fix()
