package com.kt.event.analytics.entity;

import com.kt.event.common.entity.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.*;

import java.math.BigDecimal;

/**
 * 이벤트 통계 엔티티
 *
 * Kafka Event Subscription을 통해 실시간으로 업데이트되는 이벤트 통계 정보
 */
@Entity
@Table(name = "event_stats")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EventStats extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 이벤트 ID
     */
    @Column(nullable = false, unique = true, length = 50)
    private String eventId;

    /**
     * 이벤트 제목
     */
    @Column(nullable = false, length = 200)
    private String eventTitle;

    /**
     * 사용자 ID (소유자)
     */
    @Column(nullable = false, length = 50)
    private String userId;

    /**
     * 총 참여자 수
     */
    @Column(nullable = false)
    @Builder.Default
    private Integer totalParticipants = 0;

    /**
     * 총 노출 수 (모든 채널의 노출 수 합계)
     */
    @Column(nullable = false)
    @Builder.Default
    private Integer totalViews = 0;

    /**
     * 예상 ROI (%)
     */
    @Column(precision = 10, scale = 2)
    @Builder.Default
    private BigDecimal estimatedRoi = BigDecimal.ZERO;

    /**
     * 목표 ROI (%)
     */
    @Column(precision = 10, scale = 2)
    @Builder.Default
    private BigDecimal targetRoi = BigDecimal.ZERO;

    /**
     * 매출 증가율 (%)
     */
    @Column(precision = 10, scale = 2)
    @Builder.Default
    private BigDecimal salesGrowthRate = BigDecimal.ZERO;

    /**
     * 총 투자 비용 (원)
     */
    @Column(precision = 15, scale = 2)
    @Builder.Default
    private BigDecimal totalInvestment = BigDecimal.ZERO;

    /**
     * 예상 수익 (원)
     */
    @Column(precision = 15, scale = 2)
    @Builder.Default
    private BigDecimal expectedRevenue = BigDecimal.ZERO;

    /**
     * 이벤트 상태
     */
    @Column(length = 20)
    private String status;

    /**
     * 참여자 수 증가
     */
    public void incrementParticipants() {
        this.totalParticipants++;
    }

    /**
     * 참여자 수 증가 (특정 수)
     */
    public void incrementParticipants(int count) {
        this.totalParticipants += count;
    }
}
