#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
cari_gambar_das.py — Cari featured image Pexels untuk 10 artikel DAS premium.
Fokus: mobil Asia (Alphard/MPV/SUV, Toyota, Nissan) + bengkel/mesin.
BUKAN mobil sport/Lambo. Output WebP 1000x567, anti-duplikasi via tracker 'das'.
"""
import sys, os, json, time
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + "/..")
from pexels_image import download_gambar, siapkan_featured

# Mapping per artikel → query Pexels (mobil Asia / bengkel / mesin)
QUERY_MAP = {
    "artikel-01": "car engine repair garage",
    "artikel-02": "car engine mechanic",
    "artikel-03": "engine maintenance car parts",
    "artikel-04": "mpv luxury van suv",
    "artikel-05": "car spare parts auto",
    "artikel-06": "auto repair shop car lift",
    "artikel-07": "car service center",
    "artikel-08": "car maintenance service",
    "artikel-09": "car engine closeup",
    "artikel-10": "suv car detail service",
}

TARGET = os.path.dirname(os.path.abspath(__file__))

def main():
    results = {}
    for stem, query in QUERY_MAP.items():
        out = os.path.join(TARGET, f"{stem}-featured.webp")
        print(f"\n=== {stem} | query: {query} ===")
        # Coba query utama, lalu fallback Asian-car friendly
        ok = False
        for q in [query, "toyota alphard van", "mpv van car", "suv car asian", "car mechanic workshop"]:
            if ok:
                break
            foto = cari_gambar_pexels_manual(q)
            if not foto:
                print(f"  query '{q}': kosong, coba lain")
                continue
            data = download_gambar(foto["url"])
            if not data:
                continue
            from io import BytesIO
            try:
                from PIL import Image
                im = Image.open(BytesIO(data)).convert("RGB")
                w, h = im.size
                # mode landscape 1000x567
                tw, th = 1000, 567
                target_ratio = tw / th
                curr = w / h
                if curr > target_ratio:
                    nw = int(h * target_ratio); left = (w - nw) // 2
                    im = im.crop((left, 0, left + nw, h))
                else:
                    nh = int(w / target_ratio); top = (h - nh) // 2
                    im = im.crop((0, top, w, top + nh))
                im = im.resize((tw, th), Image.LANCZOS)
                im.save(out, "WEBP", quality=90)
                print(f"  ✅ {out} (id {foto['id']}, alt: {foto['alt'][:60]})")
                results[stem] = {"id": foto["id"], "file": out, "alt": foto["alt"], "query": q}
                ok = True
            except Exception as e:
                print(f"  ⚠️ proses gagal: {e}")
        if not ok:
            print(f"  ❌ GAGAL untuk {stem}")
    print("\n=== HASIL ===")
    for k, v in results.items():
        print(f"{k}: id={v['id']} file={v['file']}")

def cari_gambar_pexels_manual(query):
    from pexels_image import PEXELS_KEYS, PEXELS_API, _tracker_path, _load_tracker, _save_tracker
    import requests
    tracker = _load_tracker("das")
    used = set(tracker.get("used_ids", []))
    for key in PEXELS_KEYS:
        try:
            r = requests.get(PEXELS_API, params={"query": query, "per_page": 20, "orientation": "landscape"},
                             headers={"Authorization": key}, timeout=30)
            if r.status_code != 200:
                time.sleep(1); continue
            for ph in r.json().get("photos", []):
                pid = str(ph.get("id"))
                if pid in used:
                    continue
                src = ph.get("src", {})
                large = src.get("large2x") or src.get("large") or src.get("original")
                if not large:
                    continue
                used.add(pid)
                tracker["used_ids"] = sorted(used)
                _save_tracker("das", tracker)
                return {"id": pid, "url": large, "alt": ph.get("alt") or query}
            # semua terpakai → reset
            tracker["used_ids"] = []
            _save_tracker("das", tracker)
            return None
        except Exception as e:
            time.sleep(1)
    return None

if __name__ == "__main__":
    main()
