import { error } from '@sveltejs/kit';
import fs from 'node:fs';
import path from 'node:path';
import type { RequestHandler } from './$types';

const IMAGE_BASE_DIRECTORY = '/workspace';

export const GET: RequestHandler = ({ params }) => {
  const imagePath = params.path;

  // 보안 검사: 상위 디렉토리 접근 방지
  if (imagePath.includes('..')) {
    throw error(403, 'Forbidden');
  }

  // [수정] imagePath가 이미 '/workspace'를 포함하는 전체 경로인지 확인
  let fullPath: string;

  // params.path가 'workspace/...'로 시작하는 경우 (URL에서는 앞의 '/'가 생략됨)
  if (imagePath.startsWith('/workspace/')) {
    // 이미 '/workspace'로 시작하므로, 앞에 '/'만 붙여 절대 경로로 만듭니다.
    fullPath = `${imagePath}`;
  } else {
    // 기존 로직: 상대 경로로 간주하고 IMAGE_BASE_DIRECTORY를 붙입니다.
    fullPath = path.join(IMAGE_BASE_DIRECTORY, imagePath);
  }
  
  console.log(`[Image Server] Requested path: ${imagePath}, Resolved to full path: ${fullPath}`);

  // 파일 존재 여부 확인
  if (!fs.existsSync(fullPath)) {
    console.error(`[Image Server] File not found at resolved path: ${fullPath}`);
    throw error(404, 'Not Found');
  }
  
  try {
    const fileBuffer = fs.readFileSync(fullPath);
    const fileExtension = path.extname(fullPath).toLowerCase();
    
    let mimeType = 'application/octet-stream';
    switch (fileExtension) {
      case '.png': mimeType = 'image/png'; break;
      case '.jpg': case '.jpeg': mimeType = 'image/jpeg'; break;
      case '.bmp': mimeType = 'image/bmp'; break;
      case '.gif': mimeType = 'image/gif'; break;
    }

    return new Response(fileBuffer, {
      headers: {
        'Content-Type': mimeType,
        'Content-Length': fileBuffer.length.toString(),
      },
    });
  } catch (e) {
    console.error(`Failed to read file: ${fullPath}`, e);
    throw error(500, 'Internal Server Error');
  }
};
