#!/usr/bin/env python3
"""Fix pass 2: The Ask overlap + operator photos"""

import json, requests, uuid

with open('/root/.config/gws/credentials.json') as f:
    creds = json.load(f)
with open('/root/.config/gws/client_secret.json') as f:
    client = json.load(f)
ci = client.get('installed', client.get('web', {}))

resp = requests.post('https://oauth2.googleapis.com/token', data={
    'client_id': ci['client_id'],
    'client_secret': ci['client_secret'],
    'refresh_token': creds['refresh_token'],
    'grant_type': 'refresh_token'
})
access_token = resp.json()['access_token']
headers = {'Authorization': f'Bearer {access_token}', 'Content-Type': 'application/json'}

PRES_ID = '1IvDHJ53PEYvge41LdLc7Tyb5U4xOmID7GjHlIYHarJY'
SLIDES_API = 'https://slides.googleapis.com/v1/presentations'
PT = 12700
INCH = 914400
PAGE_W = 9144000
PAGE_H = 5143500
MARGIN_LEFT = int(INCH * 0.8)

resp = requests.get(f'{SLIDES_API}/{PRES_ID}', headers=headers)
pres = resp.json()

reqs = []

# ─── Fix The Ask (slide 9): space out heading and body properly ─────────
print("Fixing slide 9 (The Ask)...")

for el in pres['slides'][9]['pageElements']:
    if 'shape' not in el or 'text' not in el.get('shape', {}):
        continue
    text = ""
    for te in el['shape']['text'].get('textElements', []):
        if 'textRun' in te:
            text += te['textRun']['content']
    
    eid = el['objectId']
    
    if "What would Brandwatch" in text:
        # Heading: position at top, make font 28pt, give it enough height
        print(f"  Heading: {eid}")
        reqs.append({
            "updateTextStyle": {
                "objectId": eid,
                "style": {"fontSize": {"magnitude": 28, "unit": "PT"}},
                "fields": "fontSize",
                "textRange": {"type": "ALL"}
            }
        })
        reqs.append({
            "updatePageElementTransform": {
                "objectId": eid,
                "applyMode": "ABSOLUTE",
                "transform": {
                    "scaleX": 1, "scaleY": 1,
                    "translateX": MARGIN_LEFT,
                    "translateY": int(PAGE_H * 0.16),
                    "unit": "EMU"
                }
            }
        })
        # Resize to be taller but constrained width
        reqs.append({
            "updatePageElementsZOrder": {
                "pageElementObjectIds": [eid],
                "operation": "BRING_TO_FRONT"
            }
        })
    
    elif "60-minute" in text:
        # Body: position well below the heading
        print(f"  Body: {eid}")
        reqs.append({
            "updateTextStyle": {
                "objectId": eid,
                "style": {"fontSize": {"magnitude": 13, "unit": "PT"}},
                "fields": "fontSize",
                "textRange": {"type": "ALL"}
            }
        })
        reqs.append({
            "updatePageElementTransform": {
                "objectId": eid,
                "applyMode": "ABSOLUTE",
                "transform": {
                    "scaleX": 1, "scaleY": 1,
                    "translateX": MARGIN_LEFT,
                    "translateY": int(PAGE_H * 0.60),
                    "unit": "EMU"
                }
            }
        })
    
    elif "THE ASK" in text:
        # Section label stays at top
        pass

# ─── Fix operator photos (slide 4): make them even bigger ──────────────
print("Fixing slide 4 (operator photos)...")

# Get the images on slide 4
photo_els = []
for el in pres['slides'][4]['pageElements']:
    if 'image' in el:
        photo_els.append(el)
        eid = el['objectId']
        t = el['transform']
        # Make much larger: 1.5" 
        target_size = int(INCH * 1.5)
        orig_w = el['size']['width']['magnitude']
        orig_h = el['size']['height']['magnitude']
        
        # Scale up uniformly
        scale = target_size / min(orig_w * t.get('scaleX', 1), orig_h * t.get('scaleY', 1))
        new_sx = (orig_w * t.get('scaleX', 1) * scale) / orig_w
        new_sy = (orig_h * t.get('scaleY', 1) * scale) / orig_h
        
        reqs.append({
            "updatePageElementTransform": {
                "objectId": eid,
                "applyMode": "ABSOLUTE",
                "transform": {
                    "scaleX": new_sx,
                    "scaleY": new_sy,
                    "translateX": t.get('translateX', 0),
                    "translateY": t.get('translateY', 0),
                    "unit": "EMU"
                }
            }
        })
        print(f"  Photo {eid}: scale {new_sx:.2f}x{new_sy:.2f}")

# ─── Execute ────────────────────────────────────────────────────────────────
print(f"\nSending {len(reqs)} requests...")
resp = requests.post(f"{SLIDES_API}/{PRES_ID}:batchUpdate", headers=headers, json={"requests": reqs})
if resp.status_code == 200:
    print("All fixes applied!")
else:
    print(f"Error: {resp.status_code}")
    # Try individually
    for i, req in enumerate(reqs):
        r = requests.post(f"{SLIDES_API}/{PRES_ID}:batchUpdate", headers=headers, json={"requests": [req]})
        if r.status_code != 200:
            print(f"  Failed {i}: {list(req.keys())[0]} - {r.text[:150]}")
        else:
            print(f"  OK {i}: {list(req.keys())[0]}")
