package dev.cheerfun.pixivic.biz.web.search.domain.response;

import com.fasterxml.jackson.annotation.JsonSetter;
import dev.cheerfun.pixivic.biz.web.search.domain.SearchSuggestion;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;
import java.util.stream.Collectors;

/**
 * @author OysterQAQ
 * @version 1.0
 * @date 2019/08/14 15:16
 * @description BangumiSearchResult
 */
@Data
public class BangumiSearchResponse {
    @JsonSetter("list")
    private List<ResultItem> Result;

    public static List<SearchSuggestion> castToSearchSuggestionList(BangumiSearchResponse bangumiSearchResponse) {
        return bangumiSearchResponse != null && bangumiSearchResponse.Result != null ? bangumiSearchResponse.getResult().stream()
                .map(resultItem -> new SearchSuggestion(resultItem.getKeyword(), resultItem.getKeywordTranslated()))
                .collect(Collectors.toList()) : new ArrayList<>();
    }

    public static double getAvgSum(BangumiSearchResponse bangumiSearchResponse) {
        if (bangumiSearchResponse.getResult() != null) {
            OptionalDouble average = bangumiSearchResponse.getResult().stream().filter(b -> b.getRating() != null && b.getRating().getScore() != 0).mapToInt(resultItem -> resultItem.getRating().getScore()).average();
            return average.isPresent() ? average.getAsDouble() : 0;
        }
        return 0;
    }
}

@Data
class ResultItem {
    @JsonSetter("name")
    private String keyword;
    @JsonSetter("name_cn")
    private String keywordTranslated;
    @JsonSetter("rating")
    private Rating rating;
}

@Data
class Rating {
    private int score;
}