import logging
import os
import sys
from ldap3 import Server, Connection, ALL, MODIFY_REPLACE

# Подтягиваем конфиг
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from config.config import AD_SERVER, AD_USER, AD_PASSWORD
from utils.ad_search import search_by_login as ad_search_all_bases

logger = logging.getLogger(__name__)

def upload_photo_to_ad(target_user: str, photo_path: str) -> dict:
    """
    Читает готовое фото с диска и записывает его в атрибут thumbnailPhoto в AD.
    Ищет пользователя по всем OU из AD_BASES.
    """
    from utils.ad_search import search_by_filter
    try:
        # Читаем сырые байты картинки
        with open(photo_path, "rb") as f:
            photo_bytes = f.read()

        # Ищем пользователя в AD по всем OU
        if '@' in target_user:
            ldap_filter = "(mail={})".format(target_user)
        else:
            ldap_filter = "(sAMAccountName={})".format(target_user)

        entries = search_by_filter(ldap_filter, ["cn"])

        if not entries:
            return {"success": False, "error": "Пользователь {} не найден в AD.".format(target_user)}

        user_dn = entries[0].entry_dn

        # Подключаемся для модификации
        server = Server(AD_SERVER, get_info=ALL)
        conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True)

        # 🪄 МАГИЯ: Перезаписываем атрибут thumbnailPhoto нашими байтами
        conn.modify(user_dn, {'thumbnailPhoto': [(MODIFY_REPLACE, [photo_bytes])]})

        if conn.result['result'] == 0:
            return {"success": True}
        else:
            return {"success": False, "error": str(conn.result['description'])}

    except Exception as e:
        logger.error(f"Ошибка загрузки в AD для {target_user}: {e}")
        return {"success": False, "error": "Сбой при связи с сервером Active Directory."}