#!/bin/bash

# 权限问题修复脚本

echo "=== 云盘后端权限修复工具 ==="

# 检查当前用户
echo "当前用户: $(whoami)"
echo "用户ID: $EUID"
echo "主目录: $HOME"
echo "当前目录: $(pwd)"

# 1. 检查和创建.config目录
echo ""
echo "1. 检查用户配置目录..."
if [ ! -d "$HOME/.config" ]; then
    echo "创建 .config 目录..."
    mkdir -p "$HOME/.config" || {
        echo "错误: 无法创建 .config 目录"
        exit 1
    }
    echo "✓ .config 目录创建成功"
else
    echo "✓ .config 目录已存在"
fi

# 2. 检查和创建systemd用户目录
echo ""
echo "2. 检查systemd用户目录..."
SYSTEMD_USER_DIR="$HOME/.config/systemd/user"

if [ ! -d "$SYSTEMD_USER_DIR" ]; then
    echo "创建systemd用户目录..."
    mkdir -p "$SYSTEMD_USER_DIR" || {
        echo "错误: 无法创建systemd用户目录"
        echo "尝试使用sudo创建..."
        sudo -u $(whoami) mkdir -p "$SYSTEMD_USER_DIR" || {
            echo "错误: 无法创建systemd用户目录，尝试使用临时目录"
            SYSTEMD_USER_DIR="/tmp/$(whoami)-systemd"
            mkdir -p "$SYSTEMD_USER_DIR"
            echo "使用临时目录: $SYSTEMD_USER_DIR"
        }
    }
    echo "✓ systemd用户目录创建成功: $SYSTEMD_USER_DIR"
else
    echo "✓ systemd用户目录已存在: $SYSTEMD_USER_DIR"
fi

# 3. 检查目录权限
echo ""
echo "3. 检查目录权限..."
echo ".config 目录权限: $(ls -ld $HOME/.config | awk '{print $1,$3,$4}')"
echo "systemd用户目录权限: $(ls -ld $SYSTEMD_USER_DIR | awk '{print $1,$3,$4}')"

# 4. 测试写入权限
echo ""
echo "4. 测试写入权限..."
TEST_FILE="$SYSTEMD_USER_DIR/.test_write"
if touch "$TEST_FILE" 2>/dev/null; then
    echo "✓ 写入权限正常"
    rm -f "$TEST_FILE"
else
    echo "✗ 写入权限不足，尝试修复..."
    chmod 755 "$HOME/.config" 2>/dev/null
    chmod 755 "$SYSTEMD_USER_DIR" 2>/dev/null

    if touch "$TEST_FILE" 2>/dev/null; then
        echo "✓ 权限修复成功"
        rm -f "$TEST_FILE"
    else
        echo "✗ 权限修复失败"
        echo "可能的解决方案:"
        echo "1. 检查磁盘空间: df -h"
        echo "2. 检查用户配额: quota -u $(whoami)"
        echo "3. 检查文件系统权限: mount | grep home"
        echo "4. 联系系统管理员"
        exit 1
    fi
fi

# 5. 检查systemd用户服务是否启用
echo ""
echo "5. 检查systemd用户服务..."
if systemctl --user list-units --type=service --state=running &>/dev/null; then
    echo "✓ systemd用户服务可用"
else
    echo "⚠ systemd用户服务可能不可用"
    echo "尝试启用用户systemd服务..."

    # 对于某些系统，需要启用linger
    if command -v loginctl &> /dev/null; then
        if loginctl show-user $(whoami) | grep -q "Linger=no"; then
            echo "启用用户linger服务..."
            loginctl enable-linger $(whoami) || echo "无法启用linger，可能需要管理员权限"
        fi
    fi
fi

# 6. 创建测试服务文件
echo ""
echo "6. 创建测试服务文件..."
SERVICE_FILE="$SYSTEMD_USER_DIR/cloud-drive.service"

cat > "$SERVICE_FILE" << EOF
[Unit]
Description=Cloud Drive Backend Service
Documentation=https://github.com/your-repo/cloud-drive
After=network.target

[Service]
Type=simple
WorkingDirectory=$(pwd)
ExecStart=$(pwd)/venv/bin/python $(pwd)/main.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=cloud-drive

[Install]
WantedBy=default.target
EOF

if [ -f "$SERVICE_FILE" ]; then
    echo "✓ 服务文件创建成功: $SERVICE_FILE"
    echo "文件权限: $(ls -l $SERVICE_FILE | awk '{print $1,$3,$4}')"
else
    echo "✗ 服务文件创建失败"
    exit 1
fi

# 7. 测试systemd命令
echo ""
echo "7. 测试systemd命令..."
if systemctl --user daemon-reload 2>/dev/null; then
    echo "✓ systemd用户服务重载成功"
else
    echo "⚠ systemd用户服务重载失败"
    echo "错误信息: $(systemctl --user daemon-reload 2>&1)"
fi

echo ""
echo "=== 权限修复完成 ==="
echo ""
echo "服务管理命令:"
echo "重载服务: systemctl --user daemon-reload"
echo "启用服务: systemctl --user enable cloud-drive"
echo "启动服务: systemctl --user start cloud-drive"
echo "查看状态: systemctl --user status cloud-drive"
echo "查看日志: journalctl --user -u cloud-drive -f"
echo ""
echo "如果systemd命令不可用，请使用手动管理脚本:"
echo "启动: ./start.sh"
echo "停止: ./stop.sh"
echo "状态: ./status.sh"