#!/usr/bin/env python3
"""Upload an image to a specific slide in Google Slides."""

import sys
import json
import os
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

TOKENS_DIR = os.path.expanduser("~/.openclaw/skills/gmail/tokens/")
CREDENTIALS_FILE = os.path.expanduser("~/.openclaw/skills/gmail/credentials.json")
TOKEN_FILE = os.path.join(TOKENS_DIR, "bot-calendar.json")

PRESENTATION_ID = "1QvQ7WTuOX9ampVhfJLmGSwE8KVTIEbWRsjYs7B9G0jQ"

def get_creds():
    with open(TOKEN_FILE) as f:
        token_data = json.load(f)
    with open(CREDENTIALS_FILE) as f:
        cred_data = json.load(f)
    
    client_config = cred_data.get("installed", cred_data.get("web", {}))
    
    creds = Credentials(
        token=token_data["token"],
        refresh_token=token_data.get("refresh_token"),
        token_uri=client_config.get("token_uri", "https://oauth2.googleapis.com/token"),
        client_id=client_config["client_id"],
        client_secret=client_config["client_secret"],
        scopes=token_data.get("scopes", [])
    )
    return creds

def main():
    image_path = sys.argv[1]
    slide_number = int(sys.argv[2])  # 1-indexed slide number
    
    creds = get_creds()
    
    # First, upload image to Drive
    drive_service = build("drive", "v3", credentials=creds)
    
    file_metadata = {
        "name": os.path.basename(image_path),
        "mimeType": "image/png"
    }
    media = MediaFileUpload(image_path, mimetype="image/png")
    uploaded = drive_service.files().create(
        body=file_metadata,
        media_body=media,
        fields="id,webContentLink"
    ).execute()
    
    file_id = uploaded["id"]
    print(f"Uploaded to Drive: {file_id}")
    
    # Make the file publicly readable (needed for Slides to embed it)
    drive_service.permissions().create(
        fileId=file_id,
        body={"type": "anyone", "role": "reader"}
    ).execute()
    
    image_url = f"https://drive.google.com/uc?id={file_id}"
    print(f"Image URL: {image_url}")
    
    # Now get the presentation to find the right slide
    slides_service = build("slides", "v1", credentials=creds)
    
    presentation = slides_service.presentations().get(
        presentationId=PRESENTATION_ID
    ).execute()
    
    slides = presentation.get("slides", [])
    if slide_number > len(slides):
        print(f"Error: presentation only has {len(slides)} slides, requested {slide_number}")
        sys.exit(1)
    
    target_slide = slides[slide_number - 1]
    slide_id = target_slide["objectId"]
    print(f"Target slide ID: {slide_id} (slide {slide_number})")
    
    # Get slide dimensions
    page_width = presentation["pageSize"]["width"]
    page_height = presentation["pageSize"]["height"]
    
    pw_emu = page_width.get("magnitude", 9144000)
    ph_emu = page_height.get("magnitude", 6858000)
    
    print(f"Page size: {pw_emu} x {ph_emu} EMU")
    
    # Check for existing images on the slide and remove them
    elements_to_delete = []
    for element in target_slide.get("pageElements", []):
        if "image" in element:
            elements_to_delete.append(element["objectId"])
    
    requests = []
    
    for eid in elements_to_delete:
        requests.append({"deleteObject": {"objectId": eid}})
        print(f"Will delete existing image: {eid}")
    
    # Add the new image — fill the slide
    requests.append({
        "createImage": {
            "url": image_url,
            "elementProperties": {
                "pageObjectId": slide_id,
                "size": {
                    "width": {"magnitude": pw_emu, "unit": "EMU"},
                    "height": {"magnitude": ph_emu, "unit": "EMU"}
                },
                "transform": {
                    "scaleX": 1,
                    "scaleY": 1,
                    "translateX": 0,
                    "translateY": 0,
                    "unit": "EMU"
                }
            }
        }
    })
    
    # Send the image to the back so text stays on top
    # (We'll do this after creating)
    
    response = slides_service.presentations().batchUpdate(
        presentationId=PRESENTATION_ID,
        body={"requests": requests}
    ).execute()
    
    print(f"Done! Image added to slide {slide_number}")
    print(json.dumps(response.get("replies", []), indent=2))

if __name__ == "__main__":
    main()
