package io.delphiplatform.api.v3.model.tiktok.top;

import com.fasterxml.jackson.annotation.JsonProperty;

import org.apache.commons.lang3.StringUtils;

import io.delphiplatform.api.v3.model.tiktok.TikTokChartType;
import io.delphiplatform.api.v3.rdb.entity.tiktok.TikTokTopTrackChartEntity;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class TikTokTopChart {

    @JsonProperty("id")
    private String id;

    @JsonProperty("type")
    private TikTokChartType type;

    @JsonProperty("country_code")
    private String countryCode;

    @JsonProperty("size")
    private Integer size;

    @JsonProperty("period_days")
    private Integer periodDays;

    @JsonProperty("total_positions")
    private Integer totalPositions;

    public String getName() {
        StringBuilder sb = new StringBuilder(type.getIntermediateName());
        if (periodDays > 1) {
            sb.append(" - Last 7 Days ");
        } else {
            sb.append(" - Last Day ");
        }
        sb.append(StringUtils.upperCase(countryCode));
        return sb.toString();
    }

    public static TikTokTopChart of(TikTokTopTrackChartEntity entity) {
        if (entity == null) {
            return null;
        }

        return
            TikTokTopChart.builder().id(entity.getChartId())
                .type(entity.getType())
                .countryCode(entity.getCountryCode())
                .size(entity.getSize())
                .periodDays(entity.getPeriodDays())
                .totalPositions(entity.getTotalPositions())
                .build();
    }

}
