package com.kt.event.analytics.entity;

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

import java.math.BigDecimal;

/**
 * 채널별 통계 엔티티
 *
 * 각 배포 채널별 성과 데이터를 저장
 */
@Entity
@Table(name = "channel_stats", indexes = {
    @Index(name = "idx_event_id", columnList = "event_id"),
    @Index(name = "idx_event_channel", columnList = "event_id, channel_name")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ChannelStats extends BaseTimeEntity {

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

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

    /**
     * 채널명 (우리동네TV, 지니TV, 링고비즈, SNS)
     */
    @Column(name = "channel_name", nullable = false, length = 50)
    private String channelName;

    /**
     * 채널 유형
     */
    @Column(name = "channel_type", length = 30)
    private String channelType;

    /**
     * 노출 수
     */
    @Column(nullable = false)
    @Builder.Default
    private Integer impressions = 0;

    /**
     * 조회수
     */
    @Column(nullable = false)
    @Builder.Default
    private Integer views = 0;

    /**
     * 클릭 수
     */
    @Column(nullable = false)
    @Builder.Default
    private Integer clicks = 0;

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

    /**
     * 전환 수
     */
    @Column(nullable = false)
    @Builder.Default
    private Integer conversions = 0;

    /**
     * 배포 비용 (원)
     */
    @Column(name = "distribution_cost", precision = 15, scale = 2)
    @Builder.Default
    private BigDecimal distributionCost = BigDecimal.ZERO;

    /**
     * 좋아요 수 (SNS 전용)
     */
    @Builder.Default
    private Integer likes = 0;

    /**
     * 댓글 수 (SNS 전용)
     */
    @Builder.Default
    private Integer comments = 0;

    /**
     * 공유 수 (SNS 전용)
     */
    @Builder.Default
    private Integer shares = 0;

    /**
     * 통화 수 (링고비즈 전용)
     */
    @Column(name = "total_calls")
    @Builder.Default
    private Integer totalCalls = 0;

    /**
     * 완료된 통화 수 (링고비즈 전용)
     */
    @Column(name = "completed_calls")
    @Builder.Default
    private Integer completedCalls = 0;

    /**
     * 평균 통화 시간 (초) (링고비즈 전용)
     */
    @Column(name = "average_duration")
    @Builder.Default
    private Integer averageDuration = 0;
}
