/*
 * (c) 2020 Pluto Inc.
 */
package tv.pluto.mongo.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import tv.pluto.mongo.entities.subclips.Source;
import tv.pluto.mongo.entities.subclips.SubClips;

public class SubClipsUtils extends MongoUtils {

  public SubClipsUtils() {
    super(new SubClips());
  }

  /**
   * Get list of random subClips ids
   *
   * @return list of ids
   */
  public List<String> getRandomSubClipsIds() {
    return getDocuments(MongoUtils.LIMIT).stream()
        .map(subClip -> ((SubClips) subClip).getId())
        .collect(Collectors.toList());
  }

  public List<SubClips> normaliseHSLSourceItem(List<SubClips> subClips) {
    List<SubClips> result = new ArrayList<>();

    if (!subClips.isEmpty()) {
      subClips.forEach(
          subClip -> {
            Source hlsSource =
                Source.builder()
                    .file(subClip.getUrl())
                    .type("HLS")
                    .encryption("NoEncryption")
                    .build();

            List<Source> sources = subClip.getSources();

            if (sources != null && !sources.isEmpty()) {
              boolean hlsFound =
                  sources.stream().anyMatch(source -> source.getType().equals("HLS"));
              if (!hlsFound) {
                subClip.getSources().add(hlsSource);
                result.add(subClip);
              }
            } else {
              // TODO check with Jonny
              // subClip.setSources(Collections.singletonList(hlsSource));
              result.add(subClip);
            }
          });
    }

    return result;
  }
}
