#!/usr/bin/env python3
import json, base64, re
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

with open('/Users/joemac/.openclaw/workspace/config/gmail/token.json') as f:
    token_data = json.load(f)

creds = Credentials(
    token=token_data.get('access_token', token_data.get('token')),
    refresh_token=token_data['refresh_token'],
    token_uri=token_data['token_uri'],
    client_id=token_data['client_id'],
    client_secret=token_data['client_secret'],
    scopes=token_data['scopes']
)
service = build('gmail', 'v1', credentials=creds)
results = service.users().messages().list(userId='me', q='neisha OR nuptials OR vow renewal', maxResults=5).execute()
messages = results.get('messages', [])

for msg in messages:
    m = service.users().messages().get(userId='me', id=msg['id'], format='full').execute()
    headers = {h['name']: h['value'] for h in m['payload']['headers']}
    print(f"Subject: {headers.get('Subject', 'N/A')}")
    print(f"From: {headers.get('From', 'N/A')}")
    print(f"Date: {headers.get('Date', 'N/A')}")
    
    def process_parts(parts):
        for part in parts:
            if part.get('filename'):
                print(f"  Attachment: {part['filename']} ({part['mimeType']}) size={part['body'].get('size', 0)}")
                att_id = part['body'].get('attachmentId')
                if att_id:
                    print(f"  AttachmentId: {att_id}")
            
            mime = part.get('mimeType', '')
            data = part.get('body', {}).get('data', '')
            
            if mime == 'text/plain' and data:
                text = base64.urlsafe_b64decode(data).decode('utf-8', errors='replace')
                print(f"  Body:\n{text[:3000]}")
            elif mime == 'text/html' and data:
                text = base64.urlsafe_b64decode(data).decode('utf-8', errors='replace')
                links = re.findall(r'href=["\x27](https?://[^"\x27>]+)', text)
                for link in links:
                    print(f"  Link: {link}")
            
            # Recurse into nested parts
            if part.get('parts'):
                process_parts(part['parts'])
    
    payload = m['payload']
    if payload.get('parts'):
        process_parts(payload['parts'])
    else:
        # Single part message
        data = payload.get('body', {}).get('data', '')
        if data:
            text = base64.urlsafe_b64decode(data).decode('utf-8', errors='replace')
            print(f"  Body:\n{text[:3000]}")
    
    print('---')
