package kz.konturai.parser.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Field;

import java.time.LocalDateTime;

/**
 * Performance metrics for a targeting campaign.
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PerformanceMetrics {

    /** Флаг — есть ли реальные данные (false если кампания ещё не запущена) */
    @Field("data_available")
    @Builder.Default
    private boolean dataAvailable = false;

    /** Сообщение для фронта */
    @Field("message")
    @Builder.Default
    private String message = "Данные появятся через 24-48 часов после запуска";

    @Field("impressions")
    @Builder.Default
    private Long impressions = 0L;

    @Field("clicks")
    @Builder.Default
    private Long clicks = 0L;

    @Field("spend")
    @Builder.Default
    private Double spend = 0.0;

    @Field("leads")
    @Builder.Default
    private Long leads = 0L;

    @Field("reach")
    @Builder.Default
    private Long reach = 0L;

    @Field("conversions")
    @Builder.Default
    private Long conversions = 0L;

    @Field("ctr")
    @Builder.Default
    private Double ctr = 0.0;

    @Field("cpm")
    @Builder.Default
    private Double cpm = 0.0;

    @Field("cpc")
    @Builder.Default
    private Double cpc = 0.0;

    @Field("roas")
    @Builder.Default
    private Double roas = 0.0;

    @Field("currency")
    @Builder.Default
    private String currency = "KZT";

    @Field("last_updated")
    private LocalDateTime lastUpdated;

    /** Стандартный пустой объект для новых кампаний */
    public static PerformanceMetrics empty() {
        return PerformanceMetrics.builder()
                .dataAvailable(false)
                .message("Данные появятся через 24-48 часов после запуска")
                .build();
    }

    public static PerformanceMetrics unavailable() {
        return PerformanceMetrics.builder()
                .dataAvailable(false)
                .message("Сервис метрик временно недоступен, повторите позже")
                .build();
    }
}
