#!/usr/bin/env bash

# --------------------------------
# 用于备份LaunchPad的APP分组与布局
# ---------------------------------


#----------------------
# 存放备份的路径
#----------------------

## 设置 iCloud 云盘路径
#ICLOUD_PATH="$HOME/Library/Mobile Documents/com~apple~CloudDocs"
## 获取本机名称（作为子文件夹名称）
#COMPUTER_NAME=$(scutil --get ComputerName)
## 获取当前用户名（作为子文件夹名称） 注意，自动删除用户名中的所有空格！
#USER_NAME=$USER
## 备份目录的起始路径
#BACKUP_PATH="$ICLOUD_PATH/BACKUP/$COMPUTER_NAME/$USER_NAME"
## 备份文件的最终保存路径
#PATH_LaunchpadLayout_BACKUP="$BACKUP_PATH/LaunchpadLayout/$(date +%Y-%m-%d)/"



# 路径：保存日志文件的路径
ICLOUD_PATH="$HOME/Library/Mobile Documents/com~apple~CloudDocs"            # 获取 iCloud 云盘路径，
# 生成用于标识设备的目录名称。格式为“型号名称-芯片名称-序列号/用户名”。
# 型号名称取自系统信息的 Model Name 并删除空格；芯片名称去掉 Apple 前缀并删除所有空格；序列号读取系统序列号。
MODEL_NAME_RAW=$(system_profiler SPHardwareDataType 2>/dev/null | awk -F: '/Model Name/{print $2; exit}')
MODEL_NAME_CLEAN=$(echo "${MODEL_NAME_RAW}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/[[:space:]]//g')
CPU_BRAND_RAW=$(sysctl -n machdep.cpu.brand_string 2>/dev/null)
CPU_BRAND_TRIM=$(echo "${CPU_BRAND_RAW}" | sed 's/^Apple[[:space:]]*//;s/^[[:space:]]*//;s/[[:space:]]*$//')
CPU_BRAND_CLEAN=$(echo "${CPU_BRAND_TRIM}" | sed 's/[[:space:]]//g')
SERIAL_NUMBER_RAW=$(system_profiler SPHardwareDataType 2>/dev/null | awk -F: '/Serial Number/{print $2; exit}')
SERIAL_NUMBER_CLEAN=$(echo "${SERIAL_NUMBER_RAW}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
USER_NAME="${USER:-$(whoami)}"
DEVICE_DIR="${MODEL_NAME_CLEAN}-${CPU_BRAND_CLEAN}-${SERIAL_NUMBER_CLEAN}"
# 清理多余的连字符
DEVICE_DIR=$(echo "$DEVICE_DIR" | sed 's/--*/-/g; s/^-//; s/-$//')

USER_ID=$(basename "$(dirname "$userTmpDir")")      # 提取TMPDIR路径中的随机目录ID
PARENT_DIR=$(find /System/Volumes/Data/private/var/folders/ -maxdepth 2 -type d -name "$USER_ID" -print -quit 2>/dev/null)
# 根据新的目录规则生成 BACKUP 路径。以设备标识目录（型号名称-芯片名称-序列号）为基础，并包含用户名目录。
BACKUP_BASE="$ICLOUD_PATH/BACKUP/${DEVICE_DIR}"
# 如果 BACKUP_BASE 末尾已包含用户名，则不再追加；否则追加用户名目录。
if [[ "$BACKUP_BASE" == */"$USER_NAME" ]]; then
    BACKUP_PATH="$BACKUP_BASE"
else
    BACKUP_PATH="$BACKUP_BASE/$USER_NAME"
fi
BACKUP_DATE=$(date +%Y-%m-%d)
PATH_LaunchpadLayout_BACKUP="$BACKUP_PATH/LaunchpadLayout/$BACKUP_DATE"

#----------------------
# 源文件的路径
#----------------------
PATH_LaunchpadLayout_plist_SOURCE="$HOME/Library/Preferences"

# 从 TMPDIR 中提取用户特定的 ID
USER_ID=$(basename "$(dirname "$TMPDIR")")
# 查找包含该 ID 的父目录
PARENT_DIR=$(find /System/Volumes/Data/private/var/folders/ -maxdepth 2 -type d -name "$USER_ID" 2>/dev/null)
# 设置 Launchpad 布局源路径
PATH_LaunchpadLayout_db_SOURCE="$PARENT_DIR/0"

# 命令行等效命令
# echo -e $(find $(find /System/Volumes/Data/private/var/folders/ -maxdepth 2 -type d -name "$(basename "$(dirname "$TMPDIR")")" 2>/dev/null) -maxdepth 2 -type d -name "com.apple.dock.launchpad" 2>/dev/null)

SCRIPT_PATH="$(realpath "$0")"
parent_path=$(dirname "$SCRIPT_PATH")

#----------------------
# 创建备份文件夹
#----------------------

mkdir -p "$BACKUP_PATH"
mkdir -p "$PATH_LaunchpadLayout_BACKUP"


#----------------------
# 执行备份操作
#----------------------

cp -rf "$PATH_LaunchpadLayout_plist_SOURCE/com.apple.spaces.plist"  "$PATH_LaunchpadLayout_BACKUP/"
cp -rf "$PATH_LaunchpadLayout_plist_SOURCE/com.apple.dock.plist"  "$PATH_LaunchpadLayout_BACKUP/"
sudo cp -rf "$PATH_LaunchpadLayout_db_SOURCE/com.apple.dock.launchpad"  "$PATH_LaunchpadLayout_BACKUP/"
cp "$SCRIPT_PATH" "$PATH_LaunchpadLayout_BACKUP/"
cp "$parent_path/usercmd_restore_LaunchpadLayout" "$PATH_LaunchpadLayout_BACKUP/"
cd "$PATH_LaunchpadLayout_BACKUP"
sudo chmod -R 755 ./com.apple.dock.launchpad


#----------------------
# 显示结果
#----------------------

echo -e "备份 “桌面图标” 已完成！！！"
ls -l "$PATH_LaunchpadLayout_BACKUP"


#----------------------
# 调试信息（可选）
#----------------------

echo -e ""
echo -e "TMPDIR: $TMPDIR"
echo -e "USER_ID: $USER_ID"
echo -e "PARENT_DIR: $PARENT_DIR"
echo -e "PATH_LaunchpadLayout_db_SOURCE: $PATH_LaunchpadLayout_db_SOURCE"