import { AppRequest, AppResponse } from '@/server/web';

import { getAuthInfoFromCookie } from '@/lib/auth';
import { db } from '@/lib/db';


// 获取用户头像
export async function GET(request: AppRequest) {
  try {
    const authInfo = getAuthInfoFromCookie(request);
    if (!authInfo || !authInfo.username) {
      return AppResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }

    const { searchParams } = new URL(request.url);
    const targetUser = searchParams.get('user') || authInfo.username;

    // 在聊天系统中，用户应该能够查看其他用户的头像，这对聊天功能是必要的
    // 只要是已认证用户，就可以查看任何用户的头像
    // 这对于聊天、好友功能等社交功能是必要的

    const avatar = await db.getUserAvatar(targetUser);

    if (!avatar) {
      return AppResponse.json({ avatar: null });
    }

    return AppResponse.json({ avatar });
  } catch (error) {
    console.error('获取头像失败:', error);
    return AppResponse.json({ error: '获取头像失败' }, { status: 500 });
  }
}

// 上传用户头像
export async function POST(request: AppRequest) {
  try {
    const authInfo = getAuthInfoFromCookie(request);
    if (!authInfo || !authInfo.username) {
      return AppResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }

    const body = await request.json();
    const { avatar, targetUser } = body;

    if (!avatar) {
      return AppResponse.json({ error: '头像数据不能为空' }, { status: 400 });
    }

    // 验证Base64格式
    if (!avatar.startsWith('data:image/')) {
      return AppResponse.json({ error: '无效的图片格式' }, { status: 400 });
    }

    // 检查文件大小（Base64编码后大约增加33%，2MB的限制）
    const base64Data = avatar.split(',')[1];
    const sizeInBytes = (base64Data.length * 3) / 4;
    if (sizeInBytes > 2 * 1024 * 1024) {
      return AppResponse.json({ error: '图片大小不能超过2MB' }, { status: 400 });
    }

    const userToUpdate = targetUser || authInfo.username;

    // 只允许更新自己的头像，管理员和站长可以更新任何用户的头像
    const canUpdate = userToUpdate === authInfo.username ||
      authInfo.role === 'admin' ||
      authInfo.role === 'owner';

    if (!canUpdate) {
      return AppResponse.json({ error: 'Permission denied' }, { status: 403 });
    }

    await db.setUserAvatar(userToUpdate, avatar);

    return AppResponse.json({ success: true, message: '头像上传成功' });
  } catch (error) {
    console.error('上传头像失败:', error);
    return AppResponse.json({ error: '上传头像失败' }, { status: 500 });
  }
}

// 删除用户头像
export async function DELETE(request: AppRequest) {
  try {
    const authInfo = getAuthInfoFromCookie(request);
    if (!authInfo || !authInfo.username) {
      return AppResponse.json({ error: 'Unauthorized' }, { status: 401 });
    }

    const { searchParams } = new URL(request.url);
    const targetUser = searchParams.get('user') || authInfo.username;

    // 只允许删除自己的头像，管理员和站长可以删除任何用户的头像
    const canDelete = targetUser === authInfo.username ||
      authInfo.role === 'admin' ||
      authInfo.role === 'owner';

    if (!canDelete) {
      return AppResponse.json({ error: 'Permission denied' }, { status: 403 });
    }

    await db.deleteUserAvatar(targetUser);

    return AppResponse.json({ success: true, message: '头像删除成功' });
  } catch (error) {
    console.error('删除头像失败:', error);
    return AppResponse.json({ error: '删除头像失败' }, { status: 500 });
  }
}
