"""
دانلود خودکار عکس واقعی از Pexels و قرار دادن در پروژه‌ها، اخبار، خدمات، اسلایدر.
این اسکریپت روی سیستم شما (که اینترنت دارد) اجرا می‌شود.

مراحل:
  1. یک API key رایگان از https://www.pexels.com/api/ بگیرید
  2. کلید را در متغیر PEXELS_API_KEY پایین بگذارید
  3. pip install requests Pillow
  4. python download_images.py
"""
import os, django, random, time
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'artaghadir.settings')
django.setup()

# ═══════════════════════════════════════════════════════════
#  کلید API خود را اینجا بگذارید:
PEXELS_API_KEY = "FoCI6zNLebCENdtySlvFzlbh0BqPyQPanONfVlgGHZ4qt88WUbPpS7tj"
# ═══════════════════════════════════════════════════════════

try:
    import requests
except ImportError:
    print("❌ نیاز به requests:  pip install requests")
    raise SystemExit

from io import BytesIO
from django.core.files.base import ContentFile

if PEXELS_API_KEY == "YOUR_PEXELS_API_KEY_HERE":
    print("❌ اول کلید API را در فایل بگذارید!")
    print("   از https://www.pexels.com/api/ کلید رایگان بگیرید")
    raise SystemExit

HEADERS = {"Authorization": PEXELS_API_KEY}

def search_photos(query, count=10, orientation="landscape"):
    """جستجوی عکس در Pexels و برگرداندن لیست URL ها"""
    try:
        r = requests.get(
            "https://api.pexels.com/v1/search",
            headers=HEADERS,
            params={"query": query, "per_page": count, "orientation": orientation},
            timeout=20
        )
        r.raise_for_status()
        photos = r.json().get("photos", [])
        return [p["src"]["large"] for p in photos]
    except Exception as e:
        print(f"  ⚠️ خطا در جستجوی '{query}': {e}")
        return []

def fetch_image(url):
    """دانلود یک عکس و تبدیل به ContentFile"""
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        return ContentFile(r.content)
    except Exception as e:
        print(f"  ⚠️ خطا در دانلود: {e}")
        return None

# کلیدواژه‌های جستجو برای هر بخش (انگلیسی - نتایج بهتر)
QUERIES = {
    'project': ['open pit mine', 'iron ore mine', 'mining excavator', 'copper mine', 'mine quarry', 'mining site'],
    'news':    ['mining industry', 'mineral processing', 'mining technology', 'industrial mine'],
    'service': ['geological survey', 'mining drilling', 'mineral laboratory', 'mining machinery'],
    'slider':  ['mountain mine landscape', 'large open pit mine', 'mining panorama'],
    'team':    ['engineer portrait', 'business professional', 'industrial worker portrait'],
    'award':   ['certificate award', 'trophy achievement', 'business award'],
}

# جمع‌آوری عکس برای هر دسته
print("در حال جستجوی عکس‌ها در Pexels...")
pools = {}
for kind, queries in QUERIES.items():
    urls = []
    for q in queries:
        urls += search_photos(q, count=8, orientation='square' if kind in ('team','award') else 'landscape')
        time.sleep(0.3)  # احترام به rate limit
    random.shuffle(urls)
    pools[kind] = urls
    print(f"  ✓ {kind}: {len(urls)} عکس پیدا شد")

def assign(queryset, kind, field):
    """اختصاص عکس به هر رکورد"""
    used = 0
    pool = pools.get(kind, [])
    idx = 0
    for obj in queryset:
        if idx >= len(pool):
            random.shuffle(pool); idx = 0
        if not pool:
            break
        content = fetch_image(pool[idx]); idx += 1
        if content:
            getattr(obj, field).save(f'{kind}_{obj.pk}.jpg', content, save=True)
            used += 1
            print(f"    + {kind}: {str(obj)[:40]}")
        time.sleep(0.2)
    return used

count = 0
from apps.projects.models import Project
from apps.news.models import Article
from apps.core.models import Service, Award, TeamMember, Slider

count += assign(Project.objects.all(), 'project', 'cover_image')
count += assign(Article.objects.all(), 'news', 'cover_image')
count += assign(Service.objects.all(), 'service', 'image')
count += assign(Slider.objects.all(), 'slider', 'image')
count += assign(TeamMember.objects.all(), 'team', 'photo')
count += assign(Award.objects.all(), 'award', 'image')

print(f"\n{'='*45}")
print(f"✅ {count} عکس واقعی دانلود و قرار داده شد!")
print("   صفحه را Ctrl+Shift+R کنید.")
print('='*45)
