package io.delphiplatform.api.v3.model.amazon;

import com.fasterxml.jackson.annotation.JsonProperty;
import org.openapitools.jackson.nullable.JsonNullable;

import java.util.List;

import io.delphiplatform.api.v3.rdb.entity.amazon.AmazonChartTrackLifetimeEntity;
import lombok.Data;

@Data
public class AmazonChartTrackSummary {

    @JsonProperty("chart")
    private JsonNullable<AmazonChart> chart = JsonNullable.undefined();

    @JsonProperty("summary")
    private AmazonChartPositionSummary summary;

    @JsonProperty("isrc")
    private String isrc;

    @JsonProperty("track")
    private JsonNullable<AmazonTrack> track = JsonNullable.undefined();

    public AmazonChartTrackSummary chart(AmazonChart chart) {
        this.chart = JsonNullable.of(chart);
        return this;
    }

    public AmazonChartTrackSummary track(AmazonTrack track) {
        this.track = JsonNullable.of(track);
        return this;
    }

    public AmazonChartTrackSummary summary(AmazonChartPositionSummary summary) {
        this.summary = summary;
        return this;
    }

    public AmazonChartTrackSummary isrc(String isrc) {
        this.isrc = isrc;
        return this;
    }

    public static AmazonChartTrackSummary of(AmazonChartTrackLifetimeEntity entity, boolean includeTrack,
        String artistName) {
        if (entity == null) {
            return null;
        }
        AmazonChartPositionSummary amazonChartPositionSummary = AmazonChartPositionSummary.of(entity);

        AmazonChartTrackSummary position = new AmazonChartTrackSummary()
            .chart(AmazonChart.of(entity))
            .isrc(entity.getIsrc())
            .summary(amazonChartPositionSummary);
        if (includeTrack) {
            position.track(AmazonTrack.of(entity.getTrack(), artistName));
        }
        return position;
    }
}