package com.kt.event.eventservice.application.dto.kafka;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * AI 이벤트 생성 작업 메시지 DTO
 *
 * ai-event-generation-job 토픽에서 구독하는 메시지 형식
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AIEventGenerationJobMessage {

    /**
     * 작업 ID
     */
    @JsonProperty("job_id")
    private String jobId;

    /**
     * 사용자 ID
     */
    @JsonProperty("user_id")
    private Long userId;

    /**
     * 작업 상태 (PENDING, PROCESSING, COMPLETED, FAILED)
     */
    @JsonProperty("status")
    private String status;

    /**
     * AI 추천 결과 데이터
     */
    @JsonProperty("ai_recommendation")
    private AIRecommendationData aiRecommendation;

    /**
     * 에러 메시지 (실패 시)
     */
    @JsonProperty("error_message")
    private String errorMessage;

    /**
     * 작업 생성 일시
     */
    @JsonProperty("created_at")
    private LocalDateTime createdAt;

    /**
     * 작업 완료/실패 일시
     */
    @JsonProperty("completed_at")
    private LocalDateTime completedAt;

    /**
     * AI 추천 데이터 내부 클래스
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class AIRecommendationData {

        @JsonProperty("event_title")
        private String eventTitle;

        @JsonProperty("event_description")
        private String eventDescription;

        @JsonProperty("event_type")
        private String eventType;

        @JsonProperty("target_keywords")
        private List<String> targetKeywords;

        @JsonProperty("recommended_benefits")
        private List<String> recommendedBenefits;

        @JsonProperty("start_date")
        private String startDate;

        @JsonProperty("end_date")
        private String endDate;
    }
}
