#!/bin/bash

# Nextcloud 文件管理脚本
# 用于管理员查看和管理用户文件

set -e

# 配置变量
NEXTCLOUD_PATH="/var/www/nextcloud"
DATA_PATH="/var/www/nextcloud/data"
WEB_USER="www-data"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查 Nextcloud 安装
check_nextcloud() {
    if [ ! -d "$NEXTCLOUD_PATH" ]; then
        log_error "Nextcloud 未安装在 $NEXTCLOUD_PATH"
        log_info "请修改脚本中的 NEXTCLOUD_PATH 变量"
        exit 1
    fi
    log_success "找到 Nextcloud 安装"
}

# 显示所有用户
list_users() {
    log_info "获取所有用户列表..."
    echo ""
    echo "=== 用户列表 ==="
    sudo -u $WEB_USER php $NEXTCLOUD_PATH/occ user:list
    echo ""
}

# 显示用户详细信息
show_user_info() {
    local username=$1
    if [ -z "$username" ]; then
        log_error "请提供用户名"
        return 1
    fi
    
    log_info "获取用户 $username 的详细信息..."
    echo ""
    echo "=== 用户 $username 信息 ==="
    sudo -u $WEB_USER php $NEXTCLOUD_PATH/occ user:info "$username"
    echo ""
}

# 显示用户文件统计
show_user_files() {
    local username=$1
    if [ -z "$username" ]; then
        log_error "请提供用户名"
        return 1
    fi
    
    local user_path="$DATA_PATH/$username/files"
    
    if [ ! -d "$user_path" ]; then
        log_error "用户 $username 的文件目录不存在"
        return 1
    fi
    
    log_info "分析用户 $username 的文件..."
    echo ""
    echo "=== 用户 $username 文件统计 ==="
    echo "文件总数: $(find "$user_path" -type f | wc -l)"
    echo "目录总数: $(find "$user_path" -type d | wc -l)"
    echo "总大小: $(du -sh "$user_path" | cut -f1)"
    echo ""
    
    echo "=== 按文件类型统计 ==="
    find "$user_path" -type f -name ".*" -prune -o -type f -print | \
    sed 's/.*\.//' | sort | uniq -c | sort -nr | head -10
    echo ""
    
    echo "=== 最大的 10 个文件 ==="
    find "$user_path" -type f -exec ls -lh {} + | \
    sort -k5 -hr | head -10 | awk '{print $5, $9}'
    echo ""
}

# 搜索文件
search_files() {
    local username=$1
    local pattern=$2
    
    if [ -z "$username" ] || [ -z "$pattern" ]; then
        log_error "请提供用户名和搜索模式"
        return 1
    fi
    
    local user_path="$DATA_PATH/$username/files"
    
    if [ ! -d "$user_path" ]; then
        log_error "用户 $username 的文件目录不存在"
        return 1
    fi
    
    log_info "在用户 $username 的文件中搜索: $pattern"
    echo ""
    echo "=== 搜索结果 ==="
    find "$user_path" -iname "*$pattern*" -type f | head -20
    echo ""
}

# 显示存储使用情况
show_storage_usage() {
    log_info "分析存储使用情况..."
    echo ""
    echo "=== 存储使用统计 ==="
    
    # 总存储使用
    total_size=$(du -sh "$DATA_PATH" | cut -f1)
    echo "总存储使用: $total_size"
    echo ""
    
    # 按用户统计
    echo "=== 各用户存储使用 ==="
    for user_dir in "$DATA_PATH"/*; do
        if [ -d "$user_dir" ] && [ "$(basename "$user_dir")" != "appdata_oc" ]; then
            username=$(basename "$user_dir")
            user_size=$(du -sh "$user_dir" | cut -f1)
            file_count=$(find "$user_dir/files" -type f 2>/dev/null | wc -l)
            echo "$username: $user_size ($file_count 个文件)"
        fi
    done
    echo ""
}

# 清理用户文件
cleanup_user_files() {
    local username=$1
    local pattern=$2
    
    if [ -z "$username" ]; then
        log_error "请提供用户名"
        return 1
    fi
    
    local user_path="$DATA_PATH/$username/files"
    
    if [ ! -d "$user_path" ]; then
        log_error "用户 $username 的文件目录不存在"
        return 1
    fi
    
    log_warning "即将清理用户 $username 的文件"
    if [ -n "$pattern" ]; then
        log_warning "清理模式: $pattern"
    fi
    
    read -p "确认继续？(y/N): " confirm
    if [[ $confirm != [yY] ]]; then
        log_info "操作已取消"
        return 0
    fi
    
    if [ -n "$pattern" ]; then
        find "$user_path" -iname "*$pattern*" -type f -delete
        log_success "已清理匹配 $pattern 的文件"
    else
        log_error "请提供清理模式"
        return 1
    fi
}

# 显示帮助
show_help() {
    echo "Nextcloud 文件管理脚本"
    echo ""
    echo "用法: $0 [选项] [参数]"
    echo ""
    echo "选项:"
    echo "  list-users                    显示所有用户"
    echo "  user-info <用户名>            显示用户详细信息"
    echo "  user-files <用户名>           显示用户文件统计"
    echo "  search <用户名> <模式>        搜索用户文件"
    echo "  storage                       显示存储使用情况"
    echo "  cleanup <用户名> <模式>       清理用户文件（危险操作）"
    echo "  help                         显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 list-users"
    echo "  $0 user-info john"
    echo "  $0 user-files john"
    echo "  $0 search john *.pdf"
    echo "  $0 storage"
    echo "  $0 cleanup john *.tmp"
}

# 主函数
main() {
    case "$1" in
        "list-users")
            check_nextcloud
            list_users
            ;;
        "user-info")
            check_nextcloud
            show_user_info "$2"
            ;;
        "user-files")
            check_nextcloud
            show_user_files "$2"
            ;;
        "search")
            check_nextcloud
            search_files "$2" "$3"
            ;;
        "storage")
            check_nextcloud
            show_storage_usage
            ;;
        "cleanup")
            check_nextcloud
            cleanup_user_files "$2" "$3"
            ;;
        "help"|"--help"|"-h")
            show_help
            ;;
        *)
            log_error "未知选项: $1"
            show_help
            exit 1
            ;;
    esac
}

# 运行主函数
main "$@"

