import os
import aiohttp
from config import BASE_URL, IMAGES_DIR


def build_full_url(img_src: str) -> str:
    """ساخت URL کامل از آدرس نسبی عکس"""
    if not img_src:
        return ""
    
    if img_src.startswith("http"):
        return img_src
    
    # حذف ../ های اضافی
    while img_src.startswith("../"):
        img_src = img_src[3:]
    
    if img_src.startswith("/"):
        return BASE_URL + img_src
    else:
        return BASE_URL + "/" + img_src


async def download_image(session: aiohttp.ClientSession, img_src: str, question_id: int) -> str:
    """دانلود عکس و ذخیره در پوشه question_images"""
    try:
        img_url = build_full_url(img_src)
        
        os.makedirs(IMAGES_DIR, exist_ok=True)
        
        original_name = os.path.basename(img_url.split("?")[0])
        if not original_name or "." not in original_name:
            original_name = f"image_{question_id}.png"
        
        filename = f"question_{question_id}_{original_name}"
        filepath = os.path.join(IMAGES_DIR, filename)
        
        # اگه قبلاً دانلود شده، دوباره دانلود نکن
        if os.path.exists(filepath):
            print(f"  📸 عکس قبلاً دانلود شده: {filepath}")
            return filepath
        
        print(f"  🌐 دانلود از: {img_url}")
        
        async with session.get(img_url, timeout=aiohttp.ClientTimeout(total=30)) as resp:
            if resp.status == 200:
                with open(filepath, "wb") as f:
                    f.write(await resp.read())
                print(f"  💾 ذخیره شد: {filepath}")
                return filepath
            else:
                print(f"  ⚠️ خطا در دانلود: status {resp.status}")
                return None
                
    except Exception as e:
        print(f"  ⚠️ خطا در دانلود عکس: {e}")
        return None