package com.kt.event.analytics.controller;

import com.kt.event.analytics.dto.response.TimelineAnalyticsResponse;
import com.kt.event.analytics.service.TimelineAnalyticsService;
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.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * Timeline Analytics Controller
 *
 * 시간대별 분석 API
 */
@Tag(name = "Timeline", description = "시간대별 분석 API")
@Slf4j
@RestController
@RequestMapping("/api/v1/events")
@RequiredArgsConstructor
public class TimelineAnalyticsController {

    private final TimelineAnalyticsService timelineAnalyticsService;

    /**
     * 시간대별 참여 추이
     *
     * @param eventId   이벤트 ID
     * @param interval  시간 간격 단위
     * @param startDate 조회 시작 날짜
     * @param endDate   조회 종료 날짜
     * @param metrics   조회할 지표 목록
     * @return 시간대별 참여 추이
     */
    @Operation(
        summary = "시간대별 참여 추이",
        description = "이벤트 기간 동안의 시간대별 참여 추이를 분석합니다."
    )
    @GetMapping("/{eventId}/analytics/timeline")
    public ResponseEntity<ApiResponse<TimelineAnalyticsResponse>> getTimelineAnalytics(
        @Parameter(description = "이벤트 ID", required = true)
        @PathVariable String eventId,

        @Parameter(description = "시간 간격 단위 (hourly, daily, weekly)")
        @RequestParam(required = false, defaultValue = "daily")
        String interval,

        @Parameter(description = "조회 시작 날짜 (ISO 8601 format)")
        @RequestParam(required = false)
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
        LocalDateTime startDate,

        @Parameter(description = "조회 종료 날짜 (ISO 8601 format)")
        @RequestParam(required = false)
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
        LocalDateTime endDate,

        @Parameter(description = "조회할 지표 목록 (쉼표로 구분)")
        @RequestParam(required = false)
        String metrics
    ) {
        log.info("시간대별 참여 추이 API 호출: eventId={}, interval={}", eventId, interval);

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

        TimelineAnalyticsResponse response = timelineAnalyticsService.getTimelineAnalytics(
            eventId, interval, startDate, endDate, metricList
        );

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