package com.kt.event.content.biz.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

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

/**
 * 콘텐츠 도메인 모델
 * 이벤트에 대한 전체 콘텐츠 정보 (이미지 목록 포함)
 */
@Getter
@Builder
@AllArgsConstructor
public class Content {

    /**
     * 콘텐츠 ID
     */
    private final Long id;

    /**
     * 이벤트 ID (이벤트 초안 ID)
     */
    private final Long eventDraftId;

    /**
     * 이벤트 제목
     */
    private final String eventTitle;

    /**
     * 이벤트 설명
     */
    private final String eventDescription;

    /**
     * 생성된 이미지 목록
     */
    @Builder.Default
    private final List<GeneratedImage> images = new ArrayList<>();

    /**
     * 생성일시
     */
    private final LocalDateTime createdAt;

    /**
     * 수정일시
     */
    private final LocalDateTime updatedAt;

    /**
     * 이미지 추가
     *
     * @param image 생성된 이미지
     */
    public void addImage(GeneratedImage image) {
        this.images.add(image);
    }

    /**
     * 선택된 이미지 조회
     *
     * @return 선택된 이미지 목록
     */
    public List<GeneratedImage> getSelectedImages() {
        return images.stream()
                .filter(GeneratedImage::isSelected)
                .toList();
    }

    /**
     * 특정 스타일의 이미지 조회
     *
     * @param style 이미지 스타일
     * @return 해당 스타일의 이미지 목록
     */
    public List<GeneratedImage> getImagesByStyle(ImageStyle style) {
        return images.stream()
                .filter(image -> image.getStyle() == style)
                .toList();
    }

    /**
     * 특정 플랫폼의 이미지 조회
     *
     * @param platform 플랫폼
     * @return 해당 플랫폼의 이미지 목록
     */
    public List<GeneratedImage> getImagesByPlatform(Platform platform) {
        return images.stream()
                .filter(image -> image.getPlatform() == platform)
                .toList();
    }
}
