#!/usr/bin/env python3
"""Upload files to Google Drive via Service Account."""
import sys, os, json
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

SA_KEY = os.path.expanduser("~/.openclaw/workspace-260312/.secrets/gdrive-sa.json")
SCOPES = ["https://www.googleapis.com/auth/drive"]

def get_service(subject_email=None):
    creds = service_account.Credentials.from_service_account_file(SA_KEY, scopes=SCOPES)
    if subject_email:
        creds = creds.with_subject(subject_email)
    return build("drive", "v3", credentials=creds)

def upload(service, local_path, folder_id=None, mime=None):
    name = os.path.basename(local_path)
    if not mime:
        ext = os.path.splitext(name)[1].lower()
        mime_map = {".csv": "text/csv", ".md": "text/markdown", ".json": "application/json", ".txt": "text/plain"}
        mime = mime_map.get(ext, "application/octet-stream")
    meta = {"name": name}
    if folder_id:
        meta["parents"] = [folder_id]
    media = MediaFileUpload(local_path, mimetype=mime, resumable=True)
    f = service.files().create(body=meta, media_body=media, fields="id,name,webViewLink").execute()
    return f

if __name__ == "__main__":
    import argparse
    p = argparse.ArgumentParser()
    p.add_argument("files", nargs="+")
    p.add_argument("--folder", default=None)
    p.add_argument("--subject", default=None, help="Workspace user email for domain-wide delegation")
    args = p.parse_args()
    
    svc = get_service(args.subject)
    for fp in args.files:
        r = upload(svc, fp, args.folder)
        print(json.dumps(r, ensure_ascii=False))
