#!/usr/bin/env python3
"""Fix pass for v3 deck — addresses layout issues identified in review."""

import json, requests, uuid

# ─── Auth ───────────────────────────────────────────────────────────────────
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

def uid():
    return f"fix_{uuid.uuid4().hex[:12]}"

# Get current presentation to find element IDs
resp = requests.get(f'{SLIDES_API}/{PRES_ID}', headers=headers)
pres = resp.json()

def find_elements_with_text(slide_idx, search_text):
    """Find element IDs containing specific text"""
    results = []
    slide = pres['slides'][slide_idx]
    for el in slide.get('pageElements', []):
        if 'shape' in el and 'text' in el.get('shape', {}):
            for te in el['shape']['text'].get('textElements', []):
                if 'textRun' in te and search_text in te['textRun']['content']:
                    results.append(el['objectId'])
                    break
    return results

def find_all_elements(slide_idx):
    """Get all elements with their text and transforms"""
    slide = pres['slides'][slide_idx]
    results = []
    for el in slide.get('pageElements', []):
        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']
        results.append({
            'id': el['objectId'],
            'text': text.strip()[:60],
            'transform': el.get('transform', {}),
            'size': el.get('size', {}),
            'type': 'image' if 'image' in el else ('line' if 'line' in el else 'shape')
        })
    return results

reqs = []

# ─── Fix 1: Slide 9 (The Ask) — reduce headline size and reposition body ───
print("Fix 1: Slide 9 — The Ask text overflow")
ask_headline = find_elements_with_text(9, "What would Brandwatch")
if ask_headline:
    eid = ask_headline[0]
    # Reduce font to 30pt and adjust text box
    reqs.append({
        "updateTextStyle": {
            "objectId": eid,
            "style": {
                "fontSize": {"magnitude": 30, "unit": "PT"}
            },
            "fields": "fontSize",
            "textRange": {"type": "ALL"}
        }
    })
    # Move the heading up slightly
    reqs.append({
        "updatePageElementTransform": {
            "objectId": eid,
            "applyMode": "ABSOLUTE",
            "transform": {
                "scaleX": 1, "scaleY": 1,
                "translateX": int(INCH * 0.8),
                "translateY": int(5143500 * 0.18),
                "unit": "EMU"
            }
        }
    })
    print(f"  Fixed headline: {eid}")

ask_body = find_elements_with_text(9, "60-minute conversation")
if ask_body:
    eid = ask_body[0]
    # Move body text up
    reqs.append({
        "updatePageElementTransform": {
            "objectId": eid,
            "applyMode": "ABSOLUTE",
            "transform": {
                "scaleX": 1, "scaleY": 1,
                "translateX": int(INCH * 0.8),
                "translateY": int(5143500 * 0.55),
                "unit": "EMU"
            }
        }
    })
    # Reduce font slightly
    reqs.append({
        "updateTextStyle": {
            "objectId": eid,
            "style": {
                "fontSize": {"magnitude": 13, "unit": "PT"}
            },
            "fields": "fontSize",
            "textRange": {"type": "ALL"}
        }
    })
    print(f"  Fixed body: {eid}")


# ─── Fix 2: Slide 1 (Opportunity) — make body text box taller ──────────────
print("Fix 2: Slide 1 — body text overflow")
opp_body = find_elements_with_text(1, "Your clients invest")
if opp_body:
    eid = opp_body[0]
    # Get current element info
    for el in pres['slides'][1]['pageElements']:
        if el['objectId'] == eid:
            cur_size = el['size']
            cur_h = cur_size['height']['magnitude']
            # Make it taller
            reqs.append({
                "updatePageElementTransform": {
                    "objectId": eid,
                    "applyMode": "ABSOLUTE",
                    "transform": {
                        "scaleX": 1, "scaleY": 1,
                        "translateX": int(INCH * 0.8),
                        "translateY": int(5143500 * 0.48),
                        "unit": "EMU"
                    }
                }
            })
            print(f"  Repositioned: {eid}")


# ─── Fix 3: Slide 0 (Cover) — more space between title and tagline ─────────
print("Fix 3: Slide 0 — improve title/tagline spacing")
cover_tagline = find_elements_with_text(0, "Your partner")
if cover_tagline:
    eid = cover_tagline[0]
    reqs.append({
        "updatePageElementTransform": {
            "objectId": eid,
            "applyMode": "ABSOLUTE",
            "transform": {
                "scaleX": 1, "scaleY": 1,
                "translateX": int(INCH * 0.8),
                "translateY": int(5143500 * 0.56),
                "unit": "EMU"
            }
        }
    })
    print(f"  Moved tagline down: {eid}")


# ─── Fix 4: Slide 10 (Contact) — add Lukas email placeholder ──────────────
print("Fix 4: Slide 10 — add Lukas email")
lukas_contact = find_elements_with_text(10, "Lukas Richthammer")
if lukas_contact:
    # Create email textbox below Lukas name
    lukas_email_id = uid()
    reqs.append({
        "createShape": {
            "objectId": lukas_email_id,
            "shapeType": "TEXT_BOX",
            "elementProperties": {
                "pageObjectId": "slide_10",
                "size": {
                    "width": {"magnitude": int((9144000 - int(INCH * 0.8) * 2) * 0.5), "unit": "EMU"},
                    "height": {"magnitude": int(PT * 18), "unit": "EMU"}
                },
                "transform": {
                    "scaleX": 1, "scaleY": 1,
                    "translateX": int((9144000 - (9144000 - int(INCH * 0.8) * 2) * 0.5) / 2),
                    "translateY": int(5143500 * 0.58) + int(PT * 24),
                    "unit": "EMU"
                }
            }
        }
    })
    reqs.append({"insertText": {"objectId": lukas_email_id, "text": "lukas@curiousendeavor.com"}})
    reqs.append({
        "updateTextStyle": {
            "objectId": lukas_email_id,
            "style": {
                "foregroundColor": {"opaqueColor": {"rgbColor": {"red": 0.4, "green": 0.4, "blue": 0.4}}},
                "fontFamily": "Inter",
                "fontSize": {"magnitude": 13, "unit": "PT"},
                "bold": False,
                "weightedFontFamily": {"fontFamily": "Inter", "weight": 400}
            },
            "fields": "foregroundColor,fontFamily,fontSize,bold,weightedFontFamily",
            "textRange": {"type": "ALL"}
        }
    })
    reqs.append({
        "updateParagraphStyle": {
            "objectId": lukas_email_id,
            "style": {"alignment": "CENTER"},
            "fields": "alignment",
            "textRange": {"type": "ALL"}
        }
    })
    print(f"  Added Lukas email: {lukas_email_id}")


# ─── Fix 5: Slide 4 (Operators) — enlarge photos ──────────────────────────
print("Fix 5: Slide 4 — enlarge operator photos")
for el in pres['slides'][4]['pageElements']:
    if 'image' in el:
        eid = el['objectId']
        t = el['transform']
        cur_x = t.get('translateX', 0)
        cur_y = t.get('translateY', 0)
        # Make photos bigger: 1.15" instead of 0.9"
        new_size = int(INCH * 1.15)
        reqs.append({
            "updatePageElementTransform": {
                "objectId": eid,
                "applyMode": "ABSOLUTE",
                "transform": {
                    "scaleX": new_size / el['size']['width']['magnitude'],
                    "scaleY": new_size / el['size']['height']['magnitude'],
                    "translateX": cur_x,
                    "translateY": cur_y,
                    "unit": "EMU"
                }
            }
        })
        print(f"  Enlarged photo: {eid}")


# ─── Execute ────────────────────────────────────────────────────────────────
print(f"\nSending {len(reqs)} fix requests...")
resp = requests.post(f"{SLIDES_API}/{PRES_ID}:batchUpdate", headers=headers, json={"requests": reqs})
if resp.status_code == 200:
    print("All fixes applied successfully!")
else:
    print(f"Error: {resp.status_code}")
    print(resp.text[:500])
    # 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 req {i}: {list(req.keys())[0]} - {r.text[:200]}")
        else:
            print(f"  OK req {i}: {list(req.keys())[0]}")
