from patch.include import *

from cmf.system_data import scaffold_ui_form


@app_context(commit=True)
def do_patch():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202505281537_task_uiform_mainlist )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print(f'Запуск патча {__file__}')
    with cmfutil.disable_notify():
        scaffold_ui_form()

        ui_forms = {
            request_type.ui_form_view_inner.value
            for request_type in models.CmfSDeskRequestType.list(fields=['ui_form_view_inner'])
            if request_type.ui_form_view_inner
        }
        field_name = 'sdesk_hint_docs'
        for ui_form in ui_forms:
            ui_field = models.CmfUiFormField.get(
                filter=[
                    ['name', '=', field_name],
                    ['ui_form_group.name', '=', '_main'],
                    ['parent', '=', ui_form]
                ], include_deleted=True)
            if ui_field:
                logging.info('%s', f'{field_name} field already exists in {ui_form}')
                continue

            ui_group = models.CmfUiFormGroup.get(
                filter=[['name', '=', '_main'], ['parent', '=', ui_form]], include_deleted=True)
            if not ui_group:
                logging.warning('%s', f'_main group not exists in {ui_form}')
                continue

            logging.info('%s', f'Add {field_name} field to {ui_form}')
            models.CmfUiFormField(name=field_name, parent=ui_form, ui_form_group=ui_group, hide_empty=True).save()


if __name__ == "__main__":
    init_logging()
    do_patch()
