package io.delphiplatform.api.v3.model.tiktok.top.video;

import com.fasterxml.jackson.annotation.JsonProperty;

import io.delphiplatform.api.v3.rdb.entity.tiktok.video.TikTokTopVideoLifetimeProjection;
import lombok.Data;

@Data
public class TikTokTopIsrcVideo {

    @JsonProperty("video")
    private TikTokTopVideo video;

    @JsonProperty("metrics")
    private TikTokTopIsrcVideoMetrics metrics;

    @JsonProperty("lifetime")
    private TikTokTopIsrcVideoLifetimeMetrics lifetime;

    @JsonProperty("position")
    private Integer position;

    public static TikTokTopIsrcVideo of(TikTokTopVideoLifetimeProjection projection) {
        TikTokTopIsrcVideo tikTokTopIsrcVideo = new TikTokTopIsrcVideo();
        TikTokTopVideo video = new TikTokTopVideo();

        video.setVideoId(projection.getVideoId());
        video.setPostedDate(projection.getVideoPostedDate());
        video.setUsername(projection.getVideoUsername());

        tikTokTopIsrcVideo.setVideo(video);
        TikTokTopIsrcVideoMetrics metrics = new TikTokTopIsrcVideoMetrics();

        metrics.setViewGrowth7Days(projection.getViewGrowth7Days());
        metrics.setViewGrowth28Days(projection.getViewGrowth28Days());
        metrics.setViewGrowth7DaysPercent(projection.getViewGrowth7DaysPercent());
        metrics.setViewGrowth28DaysPercent(projection.getViewGrowth28DaysPercent());

        tikTokTopIsrcVideo.setMetrics(metrics);
        TikTokTopIsrcVideoLifetimeMetrics lifetimeMetrics = new TikTokTopIsrcVideoLifetimeMetrics();
        lifetimeMetrics.setViews(projection.getViews());
        lifetimeMetrics.setLikes(projection.getLikes());
        lifetimeMetrics.setComments(projection.getComments());

        tikTokTopIsrcVideo.setLifetime(lifetimeMetrics);
        tikTokTopIsrcVideo.setPosition(projection.getPosition());

        return tikTokTopIsrcVideo;
    }

}

