package com.kt.event.analytics.controller;

import com.kt.event.analytics.dto.response.ChannelAnalyticsResponse;
import com.kt.event.analytics.service.ChannelAnalyticsService;
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.*;

import java.util.Arrays;
import java.util.List;

/**
 * Channel Analytics Controller
 *
 * 채널별 성과 분석 API
 */
@Tag(name = "Channels", description = "채널별 성과 분석 API")
@Slf4j
@RestController
@RequestMapping("/events")
@RequiredArgsConstructor
public class ChannelAnalyticsController {

    private final ChannelAnalyticsService channelAnalyticsService;

    /**
     * 채널별 성과 분석
     *
     * @param eventId  이벤트 ID
     * @param channels 조회할 채널 목록 (쉼표로 구분)
     * @param sortBy   정렬 기준
     * @param order    정렬 순서
     * @return 채널별 성과 분석
     */
    @Operation(
        summary = "채널별 성과 분석",
        description = "각 배포 채널별 성과를 상세하게 분석합니다."
    )
    @GetMapping("/{eventId}/analytics/channels")
    public ResponseEntity<ApiResponse<ChannelAnalyticsResponse>> getChannelAnalytics(
        @Parameter(description = "이벤트 ID", required = true)
        @PathVariable String eventId,

        @Parameter(description = "조회할 채널 목록 (쉼표로 구분, 미지정 시 전체)")
        @RequestParam(required = false)
        String channels,

        @Parameter(description = "정렬 기준 (views, participants, engagement_rate, conversion_rate, roi)")
        @RequestParam(required = false, defaultValue = "roi")
        String sortBy,

        @Parameter(description = "정렬 순서 (asc, desc)")
        @RequestParam(required = false, defaultValue = "desc")
        String order
    ) {
        log.info("채널별 성과 분석 API 호출: eventId={}, sortBy={}", eventId, sortBy);

        List<String> channelList = channels != null && !channels.isBlank()
            ? Arrays.asList(channels.split(","))
            : null;

        ChannelAnalyticsResponse response = channelAnalyticsService.getChannelAnalytics(
            eventId, channelList, sortBy, order
        );

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