from patch.include import *
from tqdm import tqdm

from modules.gantt.models.cmf_roadmap_quick_transformation import PRESET_FILTERS, PRESET_GROUPINGS


@app_context(commit=True)
def quick_transform_preset_update():
    """
    Создает или обновляет пресеты быстрых трансформаций на всех родмапах
    """
    all_presets = PRESET_FILTERS + PRESET_GROUPINGS

    roadmaps = models.CmfRoadmap.list(fields=['--', 'id'])
    print(f'Найдено roadmap: {len(roadmaps)}')

    updated = 0
    created = 0

    batch_size = 100

    for i, roadmap in enumerate(tqdm(roadmaps), 1):
        existing = models.CmfRoadmapQuickTransform.list(parent=roadmap, view_scope='project', fields=['name', 'type', 'config'])
        existing_map = {(qt.name.value, qt.type.value): qt for qt in existing}

        for preset in all_presets:
            key = (preset['name'], preset['type'])
            if key in existing_map:
                qt = existing_map[key]
                qt.config = preset['config']
                qt.save(only_data=True, notify=False, emit=False)
                updated += 1
            else:
                qt = models.CmfRoadmapQuickTransform()
                qt.name = preset['name']
                qt.type = preset['type']
                qt.parent = roadmap
                qt.config = preset['config']
                qt.view_scope = 'project'
                qt.save(notify=False, emit=False)
                created += 1

        if i % batch_size == 0:
            cmf_commit()

    print(f'Обновлено пресетов: {updated}, создано: {created}')


if __name__ == "__main__":
    quick_transform_preset_update()
