package tc.oc.api.reports;
import java.util.Collection;
import javax.annotation.Nullable;
import tc.oc.api.annotations.Serialize;
import tc.oc.api.docs.PlayerId;
import tc.oc.api.docs.Report;
import tc.oc.api.docs.virtual.ServerDoc;
import tc.oc.api.message.types.FindRequest;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
public class ReportSearchRequest extends FindRequest<Report> {
@Serialize private final @Nullable String server_id;
@Serialize private final @Nullable Collection<String> family_ids;
@Serialize private final @Nullable String user_id;
private final int page, perPage;
private ReportSearchRequest(String server_id, Collection<String> family_ids, String user_id, int page, int perPage) {
checkArgument(page > 0);
checkArgument(perPage > 0);
this.server_id = server_id;
this.family_ids = family_ids;
this.user_id = user_id;
this.page = page;
this.perPage = perPage;
}
public static ReportSearchRequest create(int page, int perPage) {
return new ReportSearchRequest(null, null, null, page, perPage);
}
public ReportSearchRequest forServer(ServerDoc.Identity server) {
checkState(server_id == null);
return new ReportSearchRequest(server._id(), null, null, page, perPage);
}
public ReportSearchRequest forFamilies(Collection<String> familyIds) {
checkState(family_ids == null);
return new ReportSearchRequest(null, familyIds, null, page, perPage);
}
public ReportSearchRequest forPlayer(PlayerId playerId) {
checkState(user_id == null);
return new ReportSearchRequest(server_id, family_ids, playerId._id(), page, perPage);
}
@Override
public Integer skip() {
return (page - 1) * perPage;
}
@Override
public Integer limit() {
return perPage;
}
}