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

import com.fasterxml.jackson.annotation.JsonProperty;

import java.time.LocalDate;
import java.util.List;

import io.delphiplatform.api.util.model.ModelUtils;
import io.delphiplatform.api.v3.model.ArtistSimple;
import io.delphiplatform.api.v3.model.Label;
import io.delphiplatform.api.v3.model.service.ImageService;
import io.delphiplatform.api.v3.rdb.entity.TrackEntity;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

@Builder
@Getter
@Setter
@EqualsAndHashCode
public class JunoSpotifyStreamsGrasTrackMeta {

    @JsonProperty("track_id")
    private String trackId;

    @JsonProperty("track_name")
    private String trackName;

    @JsonProperty("release_date")
    private LocalDate releaseDate;

    @JsonProperty("label")
    private Label label;

    @JsonProperty("artists")
    private List<ArtistSimple> artists;

    public static JunoSpotifyStreamsGrasTrackMeta from(TrackEntity entity, ImageService imageService) {
        if (entity == null) {
            return null;
        }

        return JunoSpotifyStreamsGrasTrackMeta.builder()
            .trackId(entity.getTrackId())
            .trackName(entity.getName())
            .releaseDate(entity.getReleaseDate())
            .label(entity.getProduct() != null ? Label.from(entity.getProduct().getLabel()) : null)
            .artists(ModelUtils.map(entity.getArtists(), a -> ArtistSimple.from(a, imageService)))
            .build();
    }
}
