package com.devjob.file;

import com.devjob.dto.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * EP30: 파일 업로드 API.
 * - 이력서(PDF), 회사 로고(이미지) 등을 업로드하고 접근 가능한 URL을 반환한다.
 * - 로그인한 회원만 업로드할 수 있다.
 */
@Tag(name = "파일")
@RestController
@RequestMapping("/api/files")
@RequiredArgsConstructor
public class FileController {

    private final FileService fileService;

    @Operation(summary = "파일 업로드", description = "이력서/로고 등 파일을 업로드하고 접근 URL을 반환합니다 (최대 5MB)", security = @SecurityRequirement(name = "bearerAuth"))
    @PreAuthorize("isAuthenticated()")
    @PostMapping("/upload")
    public ResponseEntity<ApiResponse<String>> upload(@RequestParam("file") MultipartFile file) {
        String url = fileService.upload(file);
        return ResponseEntity.status(HttpStatus.CREATED).body(ApiResponse.ok(url));
    }
}
