package com.kt.event.analytics.controller;

import com.kt.event.analytics.dto.response.RoiAnalyticsResponse;
import com.kt.event.analytics.service.RoiAnalyticsService;
import com.kt.event.common.dto.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

/**
 * ROI Analytics Controller
 *
 * 투자 대비 수익률 분석 API
 */
@Tag(name = "ROI", description = "투자 대비 수익률 분석 API")
@Slf4j
@RestController
@RequestMapping("/api/v1/events")
@RequiredArgsConstructor
public class RoiAnalyticsController {

    private final RoiAnalyticsService roiAnalyticsService;

    /**
     * 투자 대비 수익률 상세
     *
     * @param eventId           이벤트 ID
     * @param includeProjection 예상 수익 포함 여부
     * @return ROI 상세 분석
     */
    @Operation(
        summary = "투자 대비 수익률 상세",
        description = "이벤트의 투자 대비 수익률을 상세하게 분석합니다."
    )
    @GetMapping("/{eventId}/analytics/roi")
    public ResponseEntity<ApiResponse<RoiAnalyticsResponse>> getRoiAnalytics(
        @Parameter(description = "이벤트 ID", required = true)
        @PathVariable String eventId,

        @Parameter(description = "예상 수익 포함 여부")
        @RequestParam(required = false, defaultValue = "true")
        Boolean includeProjection
    ) {
        log.info("ROI 상세 분석 API 호출: eventId={}, includeProjection={}", eventId, includeProjection);

        RoiAnalyticsResponse response = roiAnalyticsService.getRoiAnalytics(eventId, includeProjection);

        return ResponseEntity.ok(ApiResponse.success(response));
    }
}
