package com.zhengmeng.ocrplatform.extraction;

import com.zhengmeng.ocrplatform.common.ApiResponse;
import com.zhengmeng.ocrplatform.integration.PluginIntegrationInterceptor;
import com.zhengmeng.ocrplatform.task.OcrTaskService;
import com.zhengmeng.ocrplatform.task.TaskNotFoundException;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/v1/ocr/tasks/{taskId}/key-values")
public class OcrExtractionController {
    private final OcrTaskService taskService;
    private final OcrKeyValueRepository keyValueRepository;

    public OcrExtractionController(OcrTaskService taskService, OcrKeyValueRepository keyValueRepository) {
        this.taskService = taskService;
        this.keyValueRepository = keyValueRepository;
    }

    @GetMapping
    public ApiResponse<List<OcrKeyValueItem>> listKeyValues(@PathVariable String taskId, HttpServletRequest request) {
        taskService.ensureResultReadable(taskId, clientCode(request));
        return ApiResponse.ok(keyValueRepository.findByTaskIdOrderByRunNoAscIdAsc(taskId).stream()
                .map(OcrKeyValueItem::from)
                .toList());
    }

    private String clientCode(HttpServletRequest request) {
        Object value = request.getAttribute(PluginIntegrationInterceptor.REQUEST_CLIENT_CODE);
        return value instanceof String clientCode ? clientCode : null;
    }
}
