#!/bin/bash
# 系统升级收集 bug 日志脚本

LAUNCHER_NAME=$(basename "$0")
UPDATE_MODULE_ROOT="/opt/update-module/current"

UPDATED_LAUNCHER="$UPDATE_MODULE_ROOT/usr/bin/$LAUNCHER_NAME"

# 入口脚本自升级判断
if [ -x "$UPDATED_LAUNCHER" ] && [ "$(readlink -f "$0")" != "$(readlink -f "$UPDATED_LAUNCHER")" ]; then
    echo "Updating launcher to $UPDATED_LAUNCHER"
    exec "$UPDATED_LAUNCHER" "$@"
fi


RECORD_PKGS_VERSION=(kylin-system-updater kylin-update-frontend kylin-software-properties ostree)

BOLD="$(tput bold 2>/dev/null || printf '')"
GREY="$(tput setaf 0 2>/dev/null || printf '')"
UNDERLINE="$(tput smul 2>/dev/null || printf '')"
RED="$(tput setaf 1 2>/dev/null || printf '')"
GREEN="$(tput setaf 2 2>/dev/null || printf '')"
YELLOW="$(tput setaf 3 2>/dev/null || printf '')"
BLUE="$(tput setaf 4 2>/dev/null || printf '')"
MAGENTA="$(tput setaf 5 2>/dev/null || printf '')"
NO_COLOR="$(tput sgr0 2>/dev/null || printf '')"

info() {
    printf '\n%s\n\n' "${BOLD}${NO_COLOR}> $*${NO_COLOR}"
}

warn() {
    printf '%s\n' "${YELLOW}! $*${NO_COLOR}"
}

error() {
    printf '%s\n\n' "${BOLD}${RED}>${NO_COLOR} ${BOLD}${RED}$*${NO_COLOR}" 
}

info "${BOLD}正在导出系统更新日志，请稍后..."

# 临时工作目录（保证唯一）
WORKDIR="/tmp/updaterlog-$$"
mkdir -p "$WORKDIR"

# 记录一些基本信息
date >> "$WORKDIR/base-info.txt"

if [ -f "/opt/update-module/current/version-manifests.json" ]; then
packages=$(python3 -c "
import json, sys
data = json.load(sys.stdin)
for name, info in data.get('packages', {}).items():
    print(f\"{name}: {info.get('current_version')} → {info.get('new_version')}\")
" < /opt/update-module/current/version-manifests.json)
fi

echo "更新的包列表：" >> "$WORKDIR/base-info.txt"
echo "$packages" >> "$WORKDIR/base-info.txt"

echo "" >> "$WORKDIR/base-info.txt"
echo "导出的基础包版本信息" >> "$WORKDIR/base-info.txt"
for pkg in "${RECORD_PKGS_VERSION[@]}"; do
    dpkg -l | grep $pkg >> "$WORKDIR/base-info.txt"
done

# 收集系统日志
cp /etc/apt/sources.list "$WORKDIR" >/dev/null 2>&1 || true
cp -r /var/log/syslog "$WORKDIR" >/dev/null 2>&1 || true
cp -r /var/log/kylin-system-updater "$WORKDIR" >/dev/null 2>&1 || true
cp -r /var/cache/kylin-system-updater "$WORKDIR/kylin-system-updater/cache" >/dev/null 2>&1 || true
cp -r /var/log/kylin-unattended-upgrades/ "$WORKDIR" >/dev/null 2>&1 || true
cp -r ~/.config/kylin-background-upgrade/ "$WORKDIR" >/dev/null 2>&1 || true

# 收集自更新内容
cp -r /opt/update-module/current/version-manifests.json "$WORKDIR"/kylin-system-updater >/dev/null 2>&1 || true
cp -r /opt/update-module/current/usr/share/update-manifests "$WORKDIR"/kylin-system-updater >/dev/null 2>&1 || true

# 收集ostree的日志
mkdir -p "$WORKDIR/ostree"
cp -r /var/log/ostree.log* "$WORKDIR"/ostree >/dev/null 2>&1 || true

# 收集推送客户端日志
cp -r /opt/kylin-software-properties/ "$WORKDIR" >/dev/null 2>&1 || true
cp -r /var/log/kylin-software-properties/ "$WORKDIR" >/dev/null 2>&1 || true
cp -r /var/lib/kylin-software-properties/ "$WORKDIR" >/dev/null 2>&1 || true

# 收集 apt/dpkg 日志
mkdir -p "$WORKDIR/dpkg"
cp -r /var/log/apt "$WORKDIR" >/dev/null 2>&1 || true
cp -r /var/log/dpkg.log "$WORKDIR"/dpkg >/dev/null 2>&1 || true
cp -r /var/lib/dpkg/status "$WORKDIR"/dpkg >/dev/null 2>&1 || true

# 收集前端日志
mkdir -p "$WORKDIR/kylin-update-frontend"
cp -r ~/.log/kylin-update-frontend "$WORKDIR"/kylin-update-frontend >/dev/null 2>&1 || true
cp -r ~/.log/kylin-update-frontend-notifysend.log "$WORKDIR"/kylin-update-frontend >/dev/null 2>&1 || true
cp -r ~/.log/ukui-control-center.log "$WORKDIR"/kylin-update-frontend >/dev/null 2>&1 || true
cp -r ~/.log/ukui-notification-daemon.log "$WORKDIR"/kylin-update-frontend >/dev/null 2>&1 || true
cp -r ~/.config/ukui-session/ "$WORKDIR"/kylin-update-frontend >/dev/null 2>&1 || true
cp -r /tmp/kylin-updateresult-notify.log "$WORKDIR"/kylin-update-frontend >/dev/null 2>&1 || true

# 收集安装器日志
mkdir -p "$WORKDIR/kylin-installer"
dpkg -l | grep kare >> "$WORKDIR/kylin-installer/kare.log" >/dev/null 2>&1 || true
kare -l >> "$WORKDIR/kylin-installer/kare-install-list.log" >/dev/null 2>&1 || true
cp -r /var/log/kare "$WORKDIR/kylin-installer/" >/dev/null 2>&1 || true
dpkg -l | grep kaiming >> "$WORKDIR/kylin-installer/kaiming.log" >/dev/null 2>&1 || true
kaiming list >> "$WORKDIR/kylin-installer/kaiming.log" >/dev/null 2>&1 || true
cp -r ~/.log/kylin-installer.log* "$WORKDIR/kylin-installer" >/dev/null 2>&1 || true
cp -r ~/.log/kylin-uninstaller.log* "$WORKDIR/kylin-installer" >/dev/null 2>&1 || true

# 打包文件名（更规范）
outputName="updaterLog.tar.gz"
tar -czf "/tmp/$outputName" -C "$(dirname "$WORKDIR")" "$(basename "$WORKDIR")" >/dev/null
rm -rf "$WORKDIR"

# 显示结果
info "${BOLD}日志输出位置：/tmp/$outputName"
