/**
 * @作者: 阿瑞
 * @功能: 图片管理API，支持获取和删除图片
 * @版本: 1.1.0
 */

import { NextRequest, NextResponse } from 'next/server';
import { access, constants, unlink, readFile } from 'fs/promises';
import path from 'path';

// 设置基础上传目录
const baseUploadsDir = path.join(process.cwd(), 'uploads');

// 获取图片的MIME类型
function getMimeType(filePath: string): string {
  const ext = path.extname(filePath).toLowerCase();
  
  switch (ext) {
    case '.jpg':
    case '.jpeg':
      return 'image/jpeg';
    case '.png':
      return 'image/png';
    case '.gif':
      return 'image/gif';
    case '.webp':
      return 'image/webp';
    default:
      return 'application/octet-stream';
  }
}

// 检查文件是否存在
async function fileExists(filePath: string) {
  try {
    await access(filePath, constants.F_OK);
    return true;
  } catch {
    return false;
  }
}

// 提取路径参数
function extractPathParams(request: NextRequest): string[] {
  const pathname = request.nextUrl.pathname;
  // 移除前面的 'api/tools/images' 部分
  const pathSegments = pathname.split('/').slice(4);
  return pathSegments;
}

/**
 * 获取图片文件（GET请求）
 */
export async function GET(request: NextRequest) {
  try {
    // 从URL路径中提取动态参数
    const pathSegments = extractPathParams(request);
    
    // 合并path参数得到完整的相对路径
    const relativePath = pathSegments.join('/');
    
    // 构建绝对路径，确保不会超出uploads目录范围
    const filePath = path.join(baseUploadsDir, relativePath);
    
    // 安全检查：确保文件路径在uploads目录下
    if (!filePath.startsWith(baseUploadsDir)) {
      return NextResponse.json(
        { 
          error: '无效的图片路径',
          code: 'INVALID_PATH'
        },
        { status: 400 }
      );
    }
    
    // 检查文件是否存在
    if (!(await fileExists(filePath))) {
      return NextResponse.json(
        { 
          error: '图片不存在',
          code: 'FILE_NOT_FOUND'
        },
        { status: 404 }
      );
    }
    
    // 使用fs.readFile读取文件，而不是fetch
    const fileBuffer = await readFile(filePath);
    
    // 获取正确的content-type
    const contentType = getMimeType(filePath);
    
    // 返回图片文件
    return new NextResponse(fileBuffer, {
      status: 200,
      headers: {
        'Content-Type': contentType,
        'Cache-Control': 'public, max-age=31536000' // 缓存1年
      }
    });
    
  } catch (error) {
    console.error('获取图片时出错:', error);
    const errorMessage = error instanceof Error ? error.message : '未知错误';
    
    return NextResponse.json(
      { 
        error: '获取图片时出错',
        details: errorMessage
      },
      { status: 500 }
    );
  }
}

/**
 * 删除图片文件（DELETE请求）
 */
export async function DELETE(request: NextRequest) {
  try {
    // 从URL路径中提取动态参数
    const pathSegments = extractPathParams(request);
    
    // 合并path参数得到完整的相对路径
    const relativePath = pathSegments.join('/');
    
    // 构建绝对路径
    const filePath = path.join(baseUploadsDir, relativePath);
    
    // 安全检查：确保文件路径在uploads目录下
    if (!filePath.startsWith(baseUploadsDir)) {
      return NextResponse.json(
        { 
          error: '无效的图片路径',
          code: 'INVALID_PATH',
          details: '请求的文件路径超出了允许的范围',
          requestedPath: relativePath
        },
        { status: 400 }
      );
    }
    
    // 检查文件是否存在
    if (!(await fileExists(filePath))) {
      return NextResponse.json(
        { 
          error: '图片不存在',
          code: 'FILE_NOT_FOUND',
          details: `文件不存在或已被删除`,
          requestedPath: relativePath
        },
        { status: 404 }
      );
    }
    
    // 删除文件
    await unlink(filePath);
    
    return NextResponse.json({
      message: '图片删除成功',
      path: relativePath,
      timestamp: new Date().toISOString()
    });
    
  } catch (error) {
    console.error('删除图片时出错:', error);
    
    const errorMessage = error instanceof Error ? error.message : '未知错误';
    
    return NextResponse.json(
      { 
        error: '删除图片时出错',
        code: 'DELETE_FAILED',
        details: errorMessage,
        timestamp: new Date().toISOString()
      },
      { status: 500 }
    );
  }
} 