from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def cust_fields():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202404171506_cust_fields )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча cust_fields')
    system_fields = [
              "responsible",
              "executors",
              "cmf_owner",
              "waiting_for",
              "priority",
              "lists",
              "fix_versions",
              "deadline",
              "agile_story_points",
              "timetracker_history",
              "components",
              "tags"
            ]
    hide_empty_fields = ["executors", "waiting_for", "deadline"]
    # не убираем их ни откуда. Они были в других группах!
    # все группы должны остаться как раньше, кроме "сведения"

    delete_fields = ['alarm_date']
    # Запишем сортировку
    order_dict = {name: index * 1000 for index, name in enumerate(system_fields)}
    for ui_form in tqdm(models.CmfUiForm.slist(filter=[['cmf_model_name', '==', 'CmfTask'],
                                                  ['code', 'NOT IN', ['ui_form.sd_create:default', 'ui_form.sd_view:default']]], include_deleted=True)):
        _filter = ['OR', ['ui_form_view', '==', ui_form.id], ['ui_form_create', '==', ui_form.id]]
        if models.CmfSDeskRequestType.sget(filter=_filter):
            continue
        main_group = models.CmfUiFormGroup.get(filter=[['name', '==','_main'], ['parent', '==', ui_form.id]], fields=['ui_form_fields.hide_empty',
                                                                                                                      'ui_form_fields.orderno'])
        if not main_group:
            print(f'У экрана {ui_form} нет основной группы!')
            continue
        ui_form_fields_dict = {obj.name.value: obj for obj in main_group.ui_form_fields}
        for field_name in system_fields:
            ui_field = ui_form_fields_dict.get(field_name, models.CmfUiFormField(parent=ui_form.id, ui_form_group=main_group, name=field_name))
            ui_field.hide_empty = field_name in hide_empty_fields
            ui_field.orderno = order_dict[field_name]
            ui_field.save(only_data=True)
        for field_name in delete_fields:
            if ui_field := ui_form_fields_dict.get(field_name):
                ui_field.delete()


if __name__ == "__main__":
    cust_fields()
