import sys
import os
import io
import logging
from ldap3 import Server, Connection, ALL
from PIL import Image

# Подтягиваем ваши настройки из конфига
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_filter as ad_search_all_bases

logging.basicConfig(level=logging.INFO, format="%(message)s")

def check_user_photo(target_user: str):
    print(f"🔍 Ищем пользователя: {target_user}...")
    
    # Если передали email, ищем по почте. Если просто логин — по sAMAccountName
    if '@' in target_user:
        ldap_filter = f"(mail={target_user})"
    else:
        ldap_filter = f"(sAMAccountName={target_user})"
        
    try:
        # Подключаемся к AD и ищем по всем OU из AD_BASES
        entries = ad_search_all_bases(ldap_filter, ["cn", "thumbnailPhoto"])

        if not entries:
            print("❌ Пользователь с такими данными не найден в AD.")
            return

        user = entries[0]
        user_name = user.cn.value if 'cn' in user else target_user
        print(f"👤 Найден сотрудник: {user_name}")

        # Проверяем, есть ли вообще фото
        if 'thumbnailPhoto' not in user or not user.thumbnailPhoto.value:
            print("⚠️ У этого пользователя НЕТ фотографии в Active Directory.")
            return

        # Достаем байты фотографии
        photo_bytes = user.thumbnailPhoto.value
        size_kb = len(photo_bytes) / 1024

        # Читаем картинку прямо из памяти (без сохранения на диск) с помощью Pillow
        image = Image.open(io.BytesIO(photo_bytes))
        width, height = image.size

        print("\n📊 --- ИНФОРМАЦИЯ О ФОТО В AD ---")
        print(f"📐 Разрешение : {width}x{height} пикселей")
        print(f"⚖️ Вес        : {size_kb:.1f} KB")
        print(f"🗂 Формат     : {image.format}")
        print("----------------------------------\n")

        # Бонус: сохраняем фото во временную папку, чтобы вы могли на него взглянуть
        safe_name = target_user.replace('@', '_').replace('.', '_')
        save_path = f"/tmp/{safe_name}_ad.jpg"

        with open(save_path, "wb") as f:
            f.write(photo_bytes)

        print(f"💾 Оригинал из AD сохранен сюда: {save_path}")
        print("Вы можете скачать его через WinSCP или открыть в TrueConf, чтобы оценить качество глазами.")

    except Exception as e:
        print(f"❌ Ошибка при подключении к AD: {e}")

if __name__ == "__main__":
    # Замените на нужный email или логин (например, 'n.shmargalova' или 'n.shmargalova@sibcem.ru')
    target = "n.shmargalova@sibcem.ru"
    
    # Если скрипт запущен с аргументом (python check_ad_photo.py логин), берем аргумент
    if len(sys.argv) > 1:
        target = sys.argv[1]
        
    check_user_photo(target)