#!/usr/bin/env python3
"""Check kitt@curiousendeavor.com for unread emails and report to Discord."""
import json, os, sys
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

TOKEN_PATH = '/root/.openclaw/workspace/google-auth/token.json'
LAST_CHECK_PATH = '/root/.openclaw/workspace/data/kitt-email-last-check.txt'

def get_service():
    with open(TOKEN_PATH) as f:
        d = json.load(f)
    creds = Credentials(
        token=d.get('access_token'),
        refresh_token=d.get('refresh_token'),
        token_uri='https://oauth2.googleapis.com/token',
        client_id=d['client_id'],
        client_secret=d['client_secret'],
    )
    return build('gmail', 'v1', credentials=creds)

def main():
    service = get_service()
    
    # Get unread messages in inbox
    results = service.users().messages().list(
        userId='me', 
        maxResults=10, 
        labelIds=['INBOX'],
        q='is:unread'
    ).execute()
    
    messages = results.get('messages', [])
    
    if not messages:
        print("NO_NEW_MAIL")
        return
    
    # Load last checked IDs
    seen_ids = set()
    os.makedirs(os.path.dirname(LAST_CHECK_PATH), exist_ok=True)
    if os.path.exists(LAST_CHECK_PATH):
        with open(LAST_CHECK_PATH) as f:
            seen_ids = set(f.read().strip().split('\n'))
    
    new_messages = []
    for m in messages:
        if m['id'] not in seen_ids:
            msg = service.users().messages().get(
                userId='me', id=m['id'], format='metadata',
                metadataHeaders=['From', 'Subject', 'Date']
            ).execute()
            headers = {h['name']: h['value'] for h in msg['payload']['headers']}
            new_messages.append({
                'id': m['id'],
                'from': headers.get('From', '?'),
                'subject': headers.get('Subject', '?'),
                'date': headers.get('Date', '?'),
                'snippet': msg.get('snippet', '')[:200]
            })
    
    if not new_messages:
        print("NO_NEW_MAIL")
        return
    
    # Save seen IDs (keep last 100)
    all_ids = list(seen_ids) + [m['id'] for m in new_messages]
    with open(LAST_CHECK_PATH, 'w') as f:
        f.write('\n'.join(all_ids[-100:]))
    
    # Output for the cron/heartbeat to pick up
    print(f"NEW_MAIL:{len(new_messages)}")
    for m in new_messages:
        print(f"  From: {m['from']}")
        print(f"  Subject: {m['subject']}")
        print(f"  Preview: {m['snippet']}")
        print()

if __name__ == '__main__':
    main()
