<%
  const layers = locals.layers;
-%>
// DO NOT MODIFY
// THIS FILE IS AUTOGENERATED

package com.mapbox.rctmgl.components.styles;

import com.mapbox.mapboxsdk.style.layers.BackgroundLayer;
import com.mapbox.mapboxsdk.style.layers.CircleLayer;
import com.mapbox.mapboxsdk.style.layers.FillExtrusionLayer;
import com.mapbox.mapboxsdk.style.layers.FillLayer;
import com.mapbox.mapboxsdk.style.layers.LineLayer;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
import com.mapbox.mapboxsdk.style.layers.PropertyValue;
import com.mapbox.mapboxsdk.style.layers.RasterLayer;
import com.mapbox.mapboxsdk.style.layers.SymbolLayer;
import com.mapbox.mapboxsdk.style.layers.HeatmapLayer;
import com.mapbox.mapboxsdk.style.layers.HillshadeLayer;
import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
import com.mapbox.mapboxsdk.style.light.Light;
import com.mapbox.mapboxsdk.style.light.Position;
import com.mapbox.rctmgl.utils.DownloadMapImageTask;

import java.util.List;

public class RCTMGLStyleFactory {
    public static final String VALUE_KEY = "value";
    public static final String SHOULD_ADD_IMAGE_KEY = "shouldAddImage";

  <%_ for (const layer of layers) { _%>
    public static void <%- setLayerMethodName(layer) -%>(final <%- getLayerType(layer, 'android') -%> layer, RCTMGLStyle style) {
      List<String> styleKeys = style.getAllStyleKeys();

      if (styleKeys.size() == 0) {
        return;
      }

      for (String styleKey : styleKeys) {
        final RCTMGLStyleValue styleValue = style.getStyleValueForKey(styleKey);

        switch (styleKey) {
          <%_ for (const prop of layer.properties) { _%>
            case "<%= prop.name %>":
              <%_ if (prop.image) { _%>
              style.addImage(styleValue, new DownloadMapImageTask.OnAllImagesLoaded() {
                  @Override
                  public void onAllImagesLoaded() {
                      RCTMGLStyleFactory.set<%- pascelCase(prop.name) -%>(layer, styleValue);
                  }
              });
              <%_ } else { _%>
              RCTMGLStyleFactory.set<%- pascelCase(prop.name) -%>(layer, styleValue);
              <%_ } _%>
              break;
            <%_ if (prop.transition) { _%>
            case "<%= prop.name %>Transition":
              RCTMGLStyleFactory.set<%- pascelCase(prop.name) -%>Transition(layer, styleValue);
              break;
            <%_ } _%>
          <%_ } _%>
        }
      }
    }
  <%_ } _%>

  <%_ for (const layer of layers) { _%>
  <%_ for (const prop of layer.properties) { _%>
    public static void set<%- pascelCase(prop.name) -%>(<%- getLayerType(layer, 'android') -%> layer, RCTMGLStyleValue styleValue) {
      <%_ if (layer.name === 'light' && prop.name === 'position') { _%>
      Float[] values = styleValue.getFloatArray(VALUE_KEY);
      layer.set<%- pascelCase(prop.name) -%>(Position.fromPosition(values[0], values[1], values[2]));
      <%_ } else if (layer.name === 'light') { _%>
      layer.set<%- pascelCase(prop.name) -%>(<%- androidGetConfigType(androidInputType(prop.type, prop.value), prop) -%>);
      <%_ } else if (prop.name === 'visibility') { _%>
      layer.setProperties(PropertyFactory.visibility(styleValue.getString(VALUE_KEY)));
      <%_ } else if (prop.type === 'resolvedImage') { _%>
      if (styleValue.isExpression()) {
        if (styleValue.isImageStringValue()) {
          layer.setProperties(PropertyFactory.<%= prop.name %>(styleValue.getImageStringValue()));
        } else {
          layer.setProperties(PropertyFactory.<%= prop.name %>(styleValue.getExpression()));
        }
      } else {
        layer.setProperties(PropertyFactory.<%= prop.name %>(<%- androidGetConfigType(androidInputType(prop.type, prop.value), prop) -%>));
      }
      <%_ } else { _%>
      if (styleValue.isExpression()) {
        layer.setProperties(PropertyFactory.<%= prop.name %>(styleValue.getExpression()));
      } else {
        layer.setProperties(PropertyFactory.<%= prop.name %>(<%- androidGetConfigType(androidInputType(prop.type, prop.value), prop) -%>));
      }
      <%_ } _%>
    }

    <%_ if (prop.transition) { %>
    public static void set<%- pascelCase(prop.name) -%>Transition(<%- getLayerType(layer, 'android') -%> layer, RCTMGLStyleValue styleValue) {
      TransitionOptions transition = styleValue.getTransition();
      if (transition != null) {
        layer.set<%- pascelCase(prop.name) -%>Transition(transition);
      }
    }

    <%_ } _%>
  <%_ } _%>
  <%_ } _%>
}
