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

import com.fasterxml.jackson.annotation.JsonProperty;

import org.openapitools.jackson.nullable.JsonNullable;

import java.util.List;

import io.delphiplatform.api.v3.model.shazam.ShazamChart;
import io.delphiplatform.api.v3.model.shazam.ShazamChartPositionSummary;
import io.delphiplatform.api.v3.model.shazam.ShazamTrack;
import io.delphiplatform.api.v3.rdb.entity.video.ShazamChartTrackSummaryReportEntity;
import lombok.Data;

/**
 * ShazamChartTrackSummary
 */
@Data
public class ShazamChartTrackSummary {

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

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

    @JsonProperty("summary")
    private ShazamChartPositionSummary summary;

    @JsonProperty("isrc")
    private String isrc;

    public static ShazamChartTrackSummary of(ShazamChartTrackSummaryReportEntity entity, boolean includeTrack,
        List<String> artistNames) {
        if (entity == null) {
            return null;
        }
        ShazamChartPositionSummary shazamChartPositionSummary = ShazamChartPositionSummary.of(entity);

        ShazamChartTrackSummary position = new ShazamChartTrackSummary()
            .chart(ShazamChart.of(entity))
            .isrc(entity.getIsrc())
            .summary(shazamChartPositionSummary);
        if (includeTrack) {
            position.track(ShazamTrack.of(entity.getTrack(), artistNames));
        }
        return position;
    }

    public ShazamChartTrackSummary chart(ShazamChart chart) {
        this.chart = JsonNullable.of(chart);
        return this;
    }

    public ShazamChartTrackSummary track(ShazamTrack track) {
        this.track = JsonNullable.of(track);
        return this;
    }


    public ShazamChartTrackSummary summary(ShazamChartPositionSummary summary) {
        this.summary = summary;
        return this;
    }

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

    public ShazamChartPositionSummary getSummary() {
        return summary;
    }

    public void setSummary(ShazamChartPositionSummary summary) {
        this.summary = summary;
    }

}

