#!/bin/bash
set -u
TMP=/private/var/folders/ft/fkt3bwqd01g7f54wvyz9wgjc0000gn/T/opencode
DEST=$HOME/Desktop/google-takeout
ARC=4070e3ed-bc73-48a5-bb51-b28f05b119ce
USERID=107372235971600563503
LOGF=$TMP/dl.log
for i in 1 2 3 4 5 6; do
  part=$((i+1))
  name=$(printf "takeout-20261103T061613Z-1-%03d.zip" "$part")
  if [ -f "$DEST/$name" ]; then echo "[$(date +%H:%M:%S)] part $part already present, skip" >> "$LOGF"; continue; fi
  echo "[$(date +%H:%M:%S)] start part $part (i=$i)" >> "$LOGF"
  cat > "$TMP/dlpart.js" <<EOF
const url = "https://takeout.google.com/takeout/download?j=$ARC&i=$i&user=$USERID";
const p = context.pages().find(x => x.url().includes("takeout.google.com")) || page;
await p.goto(url, { waitUntil: "domcontentloaded", timeout: 20000 }).catch(() => {});
await p.waitForTimeout(8000);
return { started: true };
EOF
  timeout 180 browser-control execute --session takeout --file "$TMP/dlpart.js" >> "$LOGF" 2>&1
  ok=0
  for t in $(seq 1 100); do
    sleep 10
    pending=$(find "$HOME/Downloads" -maxdepth 1 -name "*.crdownload" | wc -l | tr -d ' ')
    have=$(find "$HOME/Downloads" -maxdepth 1 -name "$name" | wc -l | tr -d ' ')
    if [ "$pending" = "0" ] && [ "$have" -ge 1 ]; then ok=1; break; fi
  done
  find "$HOME/Downloads" -maxdepth 1 -name "takeout-*-1-${part}*.zip" ! -name "$name" -delete 2>/dev/null
  if [ "$ok" = "1" ]; then
    mv "$HOME/Downloads/$name" "$DEST/" 2>/dev/null
    echo "[$(date +%H:%M:%S)] part $part OK bytes=$(stat -f%z "$DEST/$name" 2>/dev/null)" >> "$LOGF"
  else
    echo "[$(date +%H:%M:%S)] part $part TIMEOUT" >> "$LOGF"
  fi
done
echo "[$(date +%H:%M:%S)] ALL DONE" >> "$LOGF"
