from patch.include import *
from tqdm import tqdm


@app_context(commit=True)
def migrate_uiform():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202405221932_migrate_uiform )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    from cmf.system_data import scaffold_ui_form
    print('Запуск патча migrate_uiform')
    # Сначала создадим системные формы с системными группами
    scaffold_ui_form()
    models.CmfUiForm.bulk_update(filter=['cmf_model_name', '==', None], values={'cmf_model_name': 'CmfTask'})
    for ui_form in tqdm(models.CmfUiForm.list(fields=['*'], filter=[['cmf_model_name', '==', 'CmfTask'],
                                                                   ['ui_form_json', '!=', None]], include_deleted=True)):
        ui_fields = ui_form.ui_form_json['ui_fields']
        for ui_group in ui_form.ui_form_json['ui_group_fields']:
            ui_form_group = models.CmfUiFormGroup.get(name=ui_group['name'],
                                                  parent=ui_form,
                                                  type=ui_group.get('type', 'group'),
                                                  action=ui_group.get('action', 'expand'))
            if not ui_form_group:
                ui_form_group = models.CmfUiFormGroup(name=ui_group['name'],
                                                  parent=ui_form,
                                                  type=ui_group.get('type', 'group'),
                                                  action=ui_group.get('action', 'expand'))
            if 'disabled' in ui_group:
                ui_form_group.hidden = ui_group['disabled']
            ui_form_group.save()
            for field_name in ui_group['fields']:
                if not models.CmfUiFormField.sget(name=field_name, parent=ui_form, ui_form_group=ui_form_group):
                    ui_form_field = models.CmfUiFormField(name=field_name)
                    if field_name.startswith('link:'):
                        ui_form_field = models.CmfUiFormField(name=field_name.split(':')[-1],
                                                              params={'link':field_name.split(':')[1]},
                                                              type='link')
                    ui_form_field.ui_form_group=ui_form_group
                    ui_form_field.parent=ui_form
                    ui_form_field.hidden = field_name in ui_group.get('hidden_fields', [])
                    if field_name.startswith('cf_'):
                        cust_field = models.CmfCustField.get(name=field_name)
                        ui_form_field.cust_field = cust_field
                    if ui_fields.get(field_name, {}).get('requiredChanged'):
                        ui_form_field.required_change = ui_fields.get(field_name, {}).get('requiredChanged')
                    ui_form_field.save()


if __name__ == "__main__":
    migrate_uiform()
