package com.airbnb.lottie;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ColorFilter;
import android.graphics.PointF;
import android.graphics.Typeface;

import com.airbnb.lottie.value.LottieValueCallback;
import com.airbnb.lottie.value.ScaleXY;

/**
 * Property values are the same type as the generic type of their corresponding
 * {@link LottieValueCallback}. With this, we can use generics to maintain type safety
 * of the callbacks.
 * <p>
 * Supported properties:
 * Transform:
 * {@link #TRANSFORM_ANCHOR_POINT}
 * {@link #TRANSFORM_POSITION}
 * {@link #TRANSFORM_OPACITY}
 * {@link #TRANSFORM_SCALE}
 * {@link #TRANSFORM_ROTATION}
 * {@link #TRANSFORM_SKEW}
 * {@link #TRANSFORM_SKEW_ANGLE}
 * <p>
 * Fill:
 * {@link #COLOR} (non-gradient)
 * {@link #OPACITY}
 * {@link #COLOR_FILTER}
 * <p>
 * Stroke:
 * {@link #COLOR} (non-gradient)
 * {@link #STROKE_WIDTH}
 * {@link #OPACITY}
 * {@link #COLOR_FILTER}
 * <p>
 * Ellipse:
 * {@link #POSITION}
 * {@link #ELLIPSE_SIZE}
 * <p>
 * Polystar:
 * {@link #POLYSTAR_POINTS}
 * {@link #POLYSTAR_ROTATION}
 * {@link #POSITION}
 * {@link #POLYSTAR_INNER_RADIUS} (star)
 * {@link #POLYSTAR_OUTER_RADIUS}
 * {@link #POLYSTAR_INNER_ROUNDEDNESS} (star)
 * {@link #POLYSTAR_OUTER_ROUNDEDNESS}
 * <p>
 * Repeater:
 * All transform properties
 * {@link #REPEATER_COPIES}
 * {@link #REPEATER_OFFSET}
 * {@link #TRANSFORM_ROTATION}
 * {@link #TRANSFORM_START_OPACITY}
 * {@link #TRANSFORM_END_OPACITY}
 * <p>
 * Layers:
 * All transform properties
 * {@link #TIME_REMAP} (composition layers only)
 */
public interface LottieProperty {
  /**
   * ColorInt
   **/
  Integer COLOR = 1;
  Integer STROKE_COLOR = 2;
  /**
   * Opacity value are 0-100 to match after effects
   **/
  Integer TRANSFORM_OPACITY = 3;
  /**
   * [0,100]
   */
  Integer OPACITY = 4;
  /**
   * In Px
   */
  PointF TRANSFORM_ANCHOR_POINT = new PointF();
  /**
   * In Px
   */
  PointF TRANSFORM_POSITION = new PointF();
  /**
   * When split dimensions is enabled. In Px
   */
  Float TRANSFORM_POSITION_X = 15f;
  /**
   * When split dimensions is enabled. In Px
   */
  Float TRANSFORM_POSITION_Y = 16f;
  /**
   * In Px
   */
  Float BLUR_RADIUS = 17f;
  /**
   * In Px
   */
  PointF ELLIPSE_SIZE = new PointF();
  /**
   * In Px
   */
  PointF RECTANGLE_SIZE = new PointF();
  /**
   * In degrees
   */
  Float CORNER_RADIUS = 0f;
  /**
   * In Px
   */
  PointF POSITION = new PointF();
  ScaleXY TRANSFORM_SCALE = new ScaleXY();
  /**
   * In degrees
   */
  Float TRANSFORM_ROTATION = 1f;
  /**
   * 0-85
   */
  Float TRANSFORM_SKEW = 0f;
  /**
   * In degrees
   */
  Float TRANSFORM_SKEW_ANGLE = 0f;
  /**
   * In Px
   */
  Float STROKE_WIDTH = 2f;
  Float TEXT_TRACKING = 3f;
  Float REPEATER_COPIES = 4f;
  Float REPEATER_OFFSET = 5f;
  Float POLYSTAR_POINTS = 6f;
  /**
   * In degrees
   */
  Float POLYSTAR_ROTATION = 7f;
  /**
   * In Px
   */
  Float POLYSTAR_INNER_RADIUS = 8f;
  /**
   * In Px
   */
  Float POLYSTAR_OUTER_RADIUS = 9f;
  /**
   * [0,100]
   */
  Float POLYSTAR_INNER_ROUNDEDNESS = 10f;
  /**
   * [0,100]
   */
  Float POLYSTAR_OUTER_ROUNDEDNESS = 11f;
  /**
   * [0,100]
   */
  Float TRANSFORM_START_OPACITY = 12f;
  /**
   * [0,100]
   */
  Float TRANSFORM_END_OPACITY = 12.1f;
  /**
   * The time value in seconds
   */
  Float TIME_REMAP = 13f;
  /**
   * In Dp
   */
  Float TEXT_SIZE = 14f;

  ColorFilter COLOR_FILTER = new ColorFilter();
  /**
   * Array of ARGB colors that map to position stops in the original gradient.
   * For example, a gradient from red to blue could be remapped with [0xFF00FF00, 0xFFFF00FF] (green to purple).
   */
  Integer[] GRADIENT_COLOR = new Integer[0];
  /**
   * Set on text layers.
   */
  Typeface TYPEFACE = Typeface.DEFAULT;
  /**
   * Set on image layers.
   */
  Bitmap IMAGE = Bitmap.createBitmap(1, 1, Bitmap.Config.ALPHA_8);
}
