#!/usr/bin/env python3
"""Fix case study spacing: move APPROACH/OUTCOME sections down, ensure no overlap with ASK."""

import json, requests

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'
API = 'https://slides.googleapis.com/v1/presentations'
PT = 12700; INCH = 914400; PAGE_W = 9144000; PAGE_H = 5143500
MARGIN_L = int(INCH * 0.8)
CONTENT_W = PAGE_W - MARGIN_L * 2

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

reqs = []

for slide_id in ['cs_slide_1', 'cs_slide_2']:
    # Find the slide
    slide = None
    for s in pres['slides']:
        if s['objectId'] == slide_id:
            slide = s
            break
    if not slide:
        continue
    
    print(f"\n{slide_id}:")
    for el in slide['pageElements']:
        eid = el['objectId']
        t = el.get('transform', {})
        s_info = el.get('size', {})
        sx = t.get('scaleX', 1); sy = t.get('scaleY', 1)
        tx = t.get('translateX', 0); ty = t.get('translateY', 0)
        w = s_info.get('width', {}).get('magnitude', 0)
        h = s_info.get('height', {}).get('magnitude', 0)
        
        text = ""
        if 'shape' in el and 'text' in el.get('shape', {}):
            for te in el['shape']['text'].get('textElements', []):
                if 'textRun' in te:
                    text += te['textRun']['content']
            text = text.strip()[:60]
        elif 'line' in el:
            text = "[LINE]"
        
        print(f"  {eid}: y={ty/INCH:.2f}\" h={h*sy/INCH:.2f}\" | {text}")
        
        # Identify elements by their text content and reposition
        # The layout should be:
        #   y=0.70" - CASE STUDY label
        #   y=0.86" - red accent line  
        #   y=0.95" - THE ASK label
        #   y=1.10" - Ask headline (display serif) — give it ~1.2" height
        #   y=2.40" - hairline rule
        #   y=2.55" - APPROACH label (left) / OUTCOME label (right)
        #   y=2.72" - red accent lines
        #   y=2.85" - approach body / outcome stat
        #   y=3.35" - outcome stat label
        #   y=3.55" - outcome body
        
        if "THE ASK" in text and "CASE" not in text:
            # THE ASK label — keep at current position but ensure it's right
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": MARGIN_L, "translateY": int(INCH * 0.95),
                        "unit": "EMU"}
                }
            })
        elif "Reposition from" in text or "Turn social listening" in text:
            # ASK headline — position with room
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": MARGIN_L, "translateY": int(INCH * 1.12),
                        "unit": "EMU"}
                }
            })
        elif "APPROACH" in text and len(text) < 12:
            # APPROACH label
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": MARGIN_L, "translateY": int(INCH * 2.55),
                        "unit": "EMU"}
                }
            })
        elif "OUTCOME" in text and len(text) < 10:
            # OUTCOME label
            col_gap = int(INCH * 0.4)
            left_w = int(CONTENT_W * 0.52)
            right_x = MARGIN_L + left_w + col_gap
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": right_x, "translateY": int(INCH * 2.55),
                        "unit": "EMU"}
                }
            })
        elif "Ingested 18 months" in text or "Pulled audience intelligence" in text:
            # APPROACH body text — move down
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": MARGIN_L, "translateY": int(INCH * 2.85),
                        "unit": "EMU"}
                }
            })
            # Also reduce font to 11pt
            reqs.append({
                "updateTextStyle": {
                    "objectId": eid,
                    "style": {"fontSize": {"magnitude": 11, "unit": "PT"}},
                    "fields": "fontSize",
                    "textRange": {"type": "ALL"}
                }
            })
        elif "140+" in text or "3 markets" in text:
            # Big outcome stat
            col_gap = int(INCH * 0.4)
            left_w = int(CONTENT_W * 0.52)
            right_x = MARGIN_L + left_w + col_gap
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": right_x, "translateY": int(INCH * 2.85),
                        "unit": "EMU"}
                }
            })
        elif "campaign-ready" in text or "launched simultaneously" in text:
            # Stat label
            col_gap = int(INCH * 0.4)
            left_w = int(CONTENT_W * 0.52)
            right_x = MARGIN_L + left_w + col_gap
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": right_x, "translateY": int(INCH * 3.35),
                        "unit": "EMU"}
                }
            })
        elif "Full repositioning" in text or "Campaign live" in text:
            # Outcome body
            col_gap = int(INCH * 0.4)
            left_w = int(CONTENT_W * 0.52)
            right_x = MARGIN_L + left_w + col_gap
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid, "applyMode": "ABSOLUTE",
                    "transform": {"scaleX": sx, "scaleY": sy,
                        "translateX": right_x, "translateY": int(INCH * 3.55),
                        "unit": "EMU"}
                }
            })
            # Reduce font to 11pt
            reqs.append({
                "updateTextStyle": {
                    "objectId": eid,
                    "style": {"fontSize": {"magnitude": 11, "unit": "PT"}},
                    "fields": "fontSize",
                    "textRange": {"type": "ALL"}
                }
            })
        elif text == "[LINE]":
            # Lines — reposition based on current Y
            cur_y = ty / INCH
            if cur_y < 1.0:
                # Red accent line after CASE STUDY label — keep
                pass
            elif cur_y < 2.0:
                # Hairline rule between ASK and APPROACH
                reqs.append({
                    "updatePageElementTransform": {
                        "objectId": eid, "applyMode": "ABSOLUTE",
                        "transform": {"scaleX": sx, "scaleY": sy,
                            "translateX": tx, "translateY": int(INCH * 2.42),
                            "unit": "EMU"}
                    }
                })
            elif cur_y < 2.8:
                # Red accent lines under APPROACH / OUTCOME labels
                if tx < PAGE_W / 2:
                    # Left (APPROACH)
                    reqs.append({
                        "updatePageElementTransform": {
                            "objectId": eid, "applyMode": "ABSOLUTE",
                            "transform": {"scaleX": sx, "scaleY": sy,
                                "translateX": MARGIN_L, "translateY": int(INCH * 2.72),
                                "unit": "EMU"}
                        }
                    })
                else:
                    # Right (OUTCOME) 
                    col_gap = int(INCH * 0.4)
                    left_w = int(CONTENT_W * 0.52)
                    right_x = MARGIN_L + left_w + col_gap
                    reqs.append({
                        "updatePageElementTransform": {
                            "objectId": eid, "applyMode": "ABSOLUTE",
                            "transform": {"scaleX": sx, "scaleY": sy,
                                "translateX": right_x, "translateY": int(INCH * 2.72),
                                "unit": "EMU"}
                        }
                    })

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