#!/usr/bin/env python3
"""Fix/upload featured image utk 2 post SSC (4411, 4412). Upload via raw bytes multipart."""
import base64, json, urllib.request, urllib.parse

DOM='surabaya-skincentre.com'
USER='bambangbot'
PW='r4bI jsIF CsAn uTIz SlFa TnJz'
AUTH=base64.b64encode(f'{USER}:{PW}'.encode()).decode()

def wp(ep, method='GET', data=None, params=None, extra_headers=None):
    url=f'https://{DOM}/wp-json/wp/v2/{ep}'
    if params: url+='?'+urllib.parse.urlencode(params)
    body=json.dumps(data).encode() if data is not None else None
    h={'Authorization':f'Basic {AUTH}','User-Agent':'Bot/1.0'}
    if isinstance(data,dict): h['Content-Type']='application/json'
    if extra_headers: h.update(extra_headers)
    req=urllib.request.Request(url, data=body, method=method, headers=h)
    try:
        with urllib.request.urlopen(req,timeout=90) as r:
            return r.status, json.loads(r.read())
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode(errors='ignore')[:500]

def download(url):
    return urllib.request.urlopen(urllib.request.Request(url,headers={'User-Agent':'Mozilla/5.0'}),timeout=60).read()

def upload_media_raw(image_url, filename):
    """Download + upload via raw bytes, Content-Type image/jpeg."""
    img=download(image_url)
    # convert to jpeg? Pexels return jpg biasanya. force ext jpg
    headers={
        'Authorization':f'Basic {AUTH}',
        'Content-Type':'image/jpeg',
        'Content-Disposition':f'attachment; filename={filename}.jpg',
    }
    req=urllib.request.Request(f'https://{DOM}/wp-json/wp/v2/media', data=img, method='POST', headers=headers)
    try:
        with urllib.request.urlopen(req,timeout=90) as r:
            d=json.loads(r.read())
            return r.status, d.get('id'), d.get('source_url')
    except urllib.error.HTTPError as e:
        return e.code, None, e.read().decode(errors='ignore')[:300]

# gambar pexels (topic sesuai)
posts=[
    # begadang kulit
    {'id':4411,'filename':'skincare-sia-sia-begadang',
     'url':'https://images.pexels.com/photos/3784522/pexels-photo-3784522.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1',
     'alt':'Wanita terlihat lelah setelah begadang, kulit kusam'},
    # pori-pori
    {'id':4412,'filename':'pori-pori-lebar-ssc',
     'url':'https://images.pexels.com/photos/6102257/pexels-photo-6102257.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1',
     'alt':'Closeup wajah wanita memperlihatkan pori-pori kulit.'},
]

for p in posts:
    print(f"=== Post {p['id']}: {p['filename']} ===")
    try:
        sc,mid,src=upload_media_raw(p['url'], p['filename'])
        print('  upload:',sc, src)
        if sc in (200,201) and mid:
            sc2,res=wp(f'posts/{p["id"]}',method='POST',data={'featured_media':mid})
            print('  set featured_media:',sc2, '-> media',mid)
            # set alt text
            sc3,_=wp(f'media/{mid}',method='POST',data={'alt_text':p['alt']})
            print('  set alt:',sc3)
        else:
            print('  FEATURED GAGAL UPLOAD')
    except Exception as e:
        print('  ERR',e)
