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

import fr.xebia.extras.selma.Field;
import fr.xebia.extras.selma.IgnoreMissing;
import fr.xebia.extras.selma.Mapper;
import fr.xebia.extras.selma.Maps;
import io.delphiplatform.api.v3.bigtable.entity.PlaylistPosition;
import io.delphiplatform.api.v3.bigtable.entity.PlaylistPublicPosition;
import io.delphiplatform.api.v3.model.trackposition.PlaylistTrackPosition;
import io.delphiplatform.api.v3.model.trackposition.PlaylistsTrackPositionsCurrentTracklist;
import io.delphiplatform.api.v3.model.trackposition.PublicPlaylistTrackPosition;

@Mapper(withIgnoreMissing = IgnoreMissing.ALL)
public interface PlaylistTrackPositionMapper {

    @Deprecated
    PlaylistTrackPosition toTrackPosition(PlaylistPosition playlistPosition);

    PublicPlaylistTrackPosition toTrackPublicPosition(PlaylistPublicPosition playlistPublicPosition);

    @Maps(
        withCustomFields = {
            @Field({"daysInPlaylist", "numDaysOn"}),
            @Field({"dspTrackId", "trackId"})
        },
        withIgnoreFields = {
            "amazonTrack",
            "appleTrack",
            "spotifyTrack",
            "playlistDates",
            "streamingInfo"
        }
    )
    PlaylistsTrackPositionsCurrentTracklist toCurrentTrackPublicPosition(PublicPlaylistTrackPosition publicPlaylistTrackPosition);

}
