package com.airbnb.lottie;

import org.json.JSONObject;

class Mask {
  enum MaskMode {
    MaskModeAdd,
    MaskModeSubtract,
    MaskModeIntersect,
    MaskModeUnknown
  }

  private final MaskMode maskMode;
  private final AnimatableShapeValue maskPath;

  private Mask(MaskMode maskMode, AnimatableShapeValue maskPath) {
    this.maskMode = maskMode;
    this.maskPath = maskPath;
  }

  static class Factory {
    static Mask newMask(JSONObject json, LottieComposition composition) {
      MaskMode maskMode;
      switch (json.optString("mode")) {
        case "a":
          maskMode = MaskMode.MaskModeAdd;
          break;
        case "s":
          maskMode = MaskMode.MaskModeSubtract;
          break;
        case "i":
          maskMode = MaskMode.MaskModeIntersect;
          break;
        default:
          maskMode = MaskMode.MaskModeUnknown;
      }

      AnimatableShapeValue maskPath = new AnimatableShapeValue(json.optJSONObject("pt"),
          composition);
      // TODO: use this
      // JSONObject opacityJson = json.optJSONObject("o");
      // if (opacityJson != null) {
      //   AnimatableIntegerValue opacity =
      //       new AnimatableIntegerValue(opacityJson, composition, false, true);
      // }

      return new Mask(maskMode, maskPath);
    }
  }

  @SuppressWarnings("unused") MaskMode getMaskMode() {
    return maskMode;
  }

  AnimatableShapeValue getMaskPath() {
    return maskPath;
  }
}
