package dev.awesomedev.mirim.web;

import dev.awesomedev.mirim.domain.User;
import dev.awesomedev.mirim.repository.DocumentRepository;
import dev.awesomedev.mirim.service.AuthService;
import dev.awesomedev.mirim.web.dto.DocumentResponse;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 이 파일이 하는 일:
 * 학습 문서 목록 API를 제공하는 컨트롤러다.
 * 멘토 전용 문서(채점 기준 등)는 수습생에게 보이지 않도록 걸러낸다.
 */
@RestController
@RequestMapping("/api/documents")
public class DocumentController {

    private final DocumentRepository documentRepository;
    private final AuthService authService;

    public DocumentController(DocumentRepository documentRepository, AuthService authService) {
        this.documentRepository = documentRepository;
        this.authService = authService;
    }

    /** GET /api/documents — 내 역할로 볼 수 있는 문서 목록 */
    @GetMapping
    public List<DocumentResponse> list(Authentication authentication) {
        User user = authService.requireUser(authentication);
        boolean isMentor = "MENTOR".equals(user.getRole());

        // 학습 포인트: 권한 필터링을 프론트엔드에 맡기면 안 된다.
        // 프론트에서 숨겨도 API를 직접 호출하면 다 보이기 때문에, 서버가 걸러서 내려줘야 한다.
        return documentRepository.findAllByOrderBySortOrderAsc().stream()
                .filter(doc -> isMentor || !"MENTOR".equals(doc.getAudience()))
                .map(DocumentResponse::from)
                .toList();
    }
}
