package io.delphiplatform.api.v3.bigtable.entity;

import com.google.protobuf.GeneratedMessageV3;

import java.time.LocalDate;
import java.util.Map;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public abstract class TrackStream<T extends GeneratedMessageV3, S extends GeneratedMessageV3> implements DspStream {

    private LocalDate date;
    private String dsp;
    private String artistId;
    private String isrc;
    private String playlistId;
    private String productId;
    private String trackId;
    private String projectNumber;
    private String productFamilyId;

    private T streams;
    private T demographics;

    public abstract Map<String, S> getCountryStats();

    public abstract Map<String, S> getCountryDemographics();

    /**
     * @param countryCode to get streams for
     * @return streams field from countryStats. Null if no streams for requested country code
     */
    public abstract Long getStreams(String countryCode);

}
