package io.delphiplatform.api.v3.bigtable.processing.groupbykey;

import java.time.LocalDate;
import java.util.Set;

import io.delphiplatform.api.v3.bigtable.processing.GroupByFieldEnum;
import io.delphiplatform.api.v3.model.video.YouTubeSummaryItem;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

@EqualsAndHashCode
@Getter
@Setter
public class YouTubeSummaryGroupByKey {

    private String isrc;
    private LocalDate date;
    private String countryCode;
    private String videoId;
    private String projectNumber;
    private String productFamilyId;

    public YouTubeSummaryGroupByKey(YouTubeSummaryItem summaryItem, Set<GroupByFieldEnum> groupByFields) {
        groupByFields.forEach(groupByField -> {
            switch (groupByField) {
                case ISRC:
                    this.isrc = summaryItem.getDimensions().getIsrc().orElse(null);
                    break;
                case DATE:
                    this.date = summaryItem.getDimensions().getDate().orElse(null);
                    break;
                case COUNTRY_CODE:
                    this.countryCode = summaryItem.getDimensions().getCountryCode().orElse(null);
                    break;
                case VIDEO_ID:
                    this.videoId = summaryItem.getDimensions().getVideoId();
                    break;
                case PROJECT_NUMBER:
                    this.projectNumber = summaryItem.getDimensions().getProjectNumber().orElse(null);
                    break;
                case PRODUCT_FAMILY_ID:
                    this.productFamilyId = summaryItem.getDimensions().getProductFamilyId().orElse(null);
                    break;
            }
        });
    }

    public void populateSummary(YouTubeSummaryItem summaryItem) {
        if (countryCode != null) {
            summaryItem.getDimensions().countryCode(countryCode);
        }
        if (isrc != null) {
            summaryItem.getDimensions().isrc(isrc);
        }
        if (date != null) {
            summaryItem.getDimensions().date(date);
        }
        if (videoId != null) {
            summaryItem.getDimensions().videoId(videoId);
        }
        if (productFamilyId != null) {
            summaryItem.getDimensions().productFamilyId(productFamilyId);
        }
        if (projectNumber != null) {
            summaryItem.getDimensions().projectNumber(projectNumber);
        }
    }

}
