package cl.monsoon.s1next.data.api.model.collection;
import android.util.SparseArray;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Objects;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import cl.monsoon.s1next.data.api.model.Account;
import cl.monsoon.s1next.data.api.model.Forum;
import cl.monsoon.s1next.data.api.model.ForumCategoryByIds;
@JsonIgnoreProperties(ignoreUnknown = true)
public final class ForumGroups extends Account {
@JsonIgnore
private final List<Forum> forumList;
@JsonIgnore
private final List<String> forumGroupNameList;
@JsonIgnore
private final List<List<Forum>> forumGroupList;
/**
* Sorts Forums by {@link Forum#getTodayPosts()} desc
* and groups Forums by category.
*/
@JsonCreator
@SuppressWarnings("UnusedDeclaration")
public ForumGroups(@JsonProperty("catlist") List<ForumCategoryByIds> forumGroupByIdsList,
@JsonProperty("forumlist") List<Forum> forumList) {
// sort forum list by today's post count in descending order
Collections.sort(forumList, (lhs, rhs) -> -(lhs.getTodayPosts() - rhs.getTodayPosts()));
this.forumList = forumList;
SparseArray<Forum> forumSparseArray = new SparseArray<>(forumList.size());
for (Forum forum : forumList) {
forumSparseArray.put(Integer.parseInt(forum.getId()), forum);
}
this.forumGroupNameList = new ArrayList<>(forumGroupByIdsList.size());
this.forumGroupList = new ArrayList<>();
for (ForumCategoryByIds forumCategoryByIds : forumGroupByIdsList) {
this.forumGroupNameList.add(forumCategoryByIds.getName());
List<Forum> oneCategoryForumList = new ArrayList<>(forumCategoryByIds.getForumIds().size());
for (Integer id : forumCategoryByIds.getForumIds()) {
oneCategoryForumList.add(forumSparseArray.get(id));
}
forumGroupList.add(oneCategoryForumList);
}
}
public List<Forum> getForumList() {
return forumList;
}
public List<String> getForumGroupNameList() {
return forumGroupNameList;
}
public List<List<Forum>> getForumGroupList() {
return forumGroupList;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
ForumGroups that = (ForumGroups) o;
return Objects.equal(forumList, that.forumList) &&
Objects.equal(forumGroupNameList, that.forumGroupNameList) &&
Objects.equal(forumGroupList, that.forumGroupList);
}
@Override
public int hashCode() {
return Objects.hashCode(super.hashCode(), forumList, forumGroupNameList, forumGroupList);
}
}