from patch.include import *
from common.models.cmf_active_entity import CmfActiveEntity
from tqdm import tqdm
import hashlib
import os

@app_context(commit=True)
def patch():
    """
    Для тестирования патча: ( cd /opt/crm; python3 -m patch.20220XXXXXXX_PATCHNAME )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Проставляем у шаблонов logic_prefix')
    for obj in tqdm(models.CmfPerson.list(filter=['avatar_filename', '!=', ''], fields=['*'])):
        old_image_path = obj.avatar_path(obj.avatar_filename)

        image_hash = hashlib.md5(obj.login.value.encode('utf8')).hexdigest()
        new_avatar_filename = f'{image_hash}.jpeg'

        new_image_path = obj.avatar_path(new_avatar_filename)

        if old_image_path == new_image_path:
            print(f'Для {obj} перемещение уже произведено')
            continue

        print(f'move {old_image_path} to {new_image_path}')
        try:
            os.rename(old_image_path, new_image_path)
        except OSError as e:
            print(f'Ошибка перемещения аватарки. Вероятно, файл не найден - сбрасываем аватар. {e}')
            new_avatar_filename = None

        obj.avatar_filename = new_avatar_filename
        obj.save(only_data=True)




if __name__ == "__main__":
    patch()
