package com.kt.ai.model.dto.response;

import com.kt.ai.model.enums.EventMechanicsType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 이벤트 추천안 DTO
 *
 * @author AI Service Team
 * @since 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EventRecommendation {
    /**
     * 옵션 번호 (1-3)
     */
    private Integer optionNumber;

    /**
     * 이벤트 컨셉
     */
    private String concept;

    /**
     * 이벤트 제목
     */
    private String title;

    /**
     * 이벤트 설명
     */
    private String description;

    /**
     * 목표 고객층
     */
    private String targetAudience;

    /**
     * 이벤트 기간
     */
    private Duration duration;

    /**
     * 이벤트 메커니즘
     */
    private Mechanics mechanics;

    /**
     * 추천 홍보 채널 (최대 5개)
     */
    private List<String> promotionChannels;

    /**
     * 예상 비용
     */
    private EstimatedCost estimatedCost;

    /**
     * 예상 성과 지표
     */
    private ExpectedMetrics expectedMetrics;

    /**
     * 다른 옵션과의 차별점
     */
    private String differentiator;

    /**
     * 이벤트 기간
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Duration {
        /**
         * 권장 진행 일수
         */
        private Integer recommendedDays;

        /**
         * 권장 진행 시기
         */
        private String recommendedPeriod;
    }

    /**
     * 이벤트 메커니즘
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Mechanics {
        /**
         * 이벤트 유형
         */
        private EventMechanicsType type;

        /**
         * 상세 메커니즘
         */
        private String details;
    }

    /**
     * 예상 비용
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class EstimatedCost {
        /**
         * 최소 비용 (원)
         */
        private Integer min;

        /**
         * 최대 비용 (원)
         */
        private Integer max;

        /**
         * 비용 구성
         */
        private Map<String, Integer> breakdown;
    }
}
