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.AmazonChartTrackEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode
@Data
public class AmazonChartTrackPosition {

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

    @JsonProperty("position")
    private AmazonChartPosition position;

    @JsonProperty("isrc")
    private String isrc;

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

    public static AmazonChartTrackPosition of(AmazonChartTrackEntity entity, boolean includeTrack,
        String artistName) {
        if (entity == null) {
            return null;
        }

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

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

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

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

    public AmazonChartTrackPosition position(AmazonChartPosition position) {
        this.position = position;
        return this;
    }
}