#!/bin/bash
# photos_sync_status.sh — iCloud Photos sync progress, safely.
# Copies Photos.sqlite (+WAL/SHM) to a temp dir before reading; never opens the live DB.
set -euo pipefail

LIB="${1:-$HOME/Pictures/Photos Library.photoslibrary}/database"
TMP=$(mktemp -d /tmp/photos_sync.XXXXXX)
trap 'rm -rf "$TMP"' EXIT

cp "$LIB/Photos.sqlite" "$TMP/"
cp "$LIB/Photos.sqlite-wal" "$LIB/Photos.sqlite-shm" "$TMP/" 2>/dev/null || true

sqlite3 -readonly "$TMP/Photos.sqlite" <<'SQL'
.mode column
.headers on
SELECT
  count(*)                                            AS total_assets,
  sum(ZCLOUDLOCALSTATE = 1)                           AS synced,
  sum(ZCLOUDLOCALSTATE = 0 AND ZTRASHEDSTATE = 0)     AS pending,
  printf('%.2f%%', 100.0 * sum(ZCLOUDLOCALSTATE=1) / count(*)) AS pct_synced
FROM ZASSET;

SELECT CASE ZKIND WHEN 0 THEN 'photo' ELSE 'video' END AS kind,
       count(*) AS pending
FROM ZASSET
WHERE ZCLOUDLOCALSTATE = 0 AND ZTRASHEDSTATE = 0
GROUP BY 1;

SELECT CASE ZCLOUDLOCALSTATE
         WHEN 0 THEN 'original pending upload'
         WHEN 1 THEN 'original uploaded'
         WHEN 3 THEN 'original downloaded'
         ELSE 'state ' || ZCLOUDLOCALSTATE END AS cloudmaster_state,
       count(*) AS n
FROM ZCLOUDMASTER
GROUP BY 1;
SQL
