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

import com.google.cloud.bigtable.data.v2.models.Row;
import com.google.protobuf.InvalidProtocolBufferException;
import com.sonymusic.delphi.etl.apps.proto.Tiktok.TikTokCountryStats;

import org.springframework.stereotype.Service;

import io.delphiplatform.api.v3.bigtable.ParseProtoException;
import io.delphiplatform.api.v3.bigtable.entity.TikTokTrackMetrics;
import io.delphiplatform.api.v3.model.tiktok.TikTokContentType;

import static io.delphiplatform.api.v3.bigtable.reader.BigtableColumns.CONTENT_TYPE;
import static io.delphiplatform.api.v3.bigtable.reader.BigtableColumns.ISRC;
import static io.delphiplatform.api.v3.bigtable.reader.BigtableColumns.STREAMS;

@Service
public class TikTokTrackAnalyticReader extends BigtableEntityReader<TikTokTrackMetrics> {

    @Override
    public TikTokTrackMetrics readRow(Row row) {
        TikTokTrackMetrics trackMetrics = new TikTokTrackMetrics();

        trackMetrics.setDate(readDate(row, BigtableColumns.DATE_SIMPLE));
        trackMetrics.setIsrc(readString(row, ISRC));
        trackMetrics.setContentType(TikTokContentType.fromValue(readString(row, CONTENT_TYPE)));

        readBytes(row, STREAMS).ifPresent(bytes -> {
            try {
                trackMetrics.setStats(TikTokCountryStats.parseFrom(bytes));
            } catch (InvalidProtocolBufferException e) {
                throw new ParseProtoException("Cannot parse tiktok proto stats.", e);
            }
        });
        return trackMetrics;
    }

    @Override
    public Class<TikTokTrackMetrics> getParsedClass() {
        return TikTokTrackMetrics.class;
    }

}
