package com.rn.s.baidumap.mapview;

import com.rn.s.baidumap.view.OverlayMarker;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;

import java.util.List;
import java.util.ArrayList;

/**
 * Created by sujialong on 2019/7/9.
 */

public class OverlayMarkerManager extends SimpleViewManager<OverlayMarker> {
    @Override
    public String getName() {
        return "RCTMarkerView";
    }

    @Override
    protected OverlayMarker createViewInstance(ThemedReactContext reactContext) {
        return new OverlayMarker(reactContext);
    }

    @ReactProp(name = "title")
    public void setTitle(OverlayMarker overlayMarker, ReadableArray title) {
        List list = new ArrayList();
        int len = title.size();
        for (int i = 0; i < len; i++){
            ReadableMap item = title.getMap(i);
            String key = new String(item.getString("key"));
            String color = new String(item.getString("color"));
            String name = new String(item.getString("name"));
            String row1 = new String(item.getString("row1"));
            String row2 = new String(item.getString("row2"));
            String row3 = new String(item.getString("row3"));
            String row4 = new String(item.getString("row4"));
            list.add(key);
            list.add(name);
            list.add(row1);
            list.add(row2);
            list.add(row3);
            list.add(row4);
            list.add(color);
        }

        overlayMarker.setTitle(list);
    }

    @ReactProp(name = "location")
    public void setLocation(OverlayMarker overlayMarker, ReadableMap position) {
        if(position != null && position.toHashMap().size() > 0) {
            double latitude = position.getDouble("latitude");
            double longitude = position.getDouble("longitude");
            overlayMarker.setPosition(latitude, longitude);
        }
    }

    @ReactProp(name = "icon")
    public void setIcon(OverlayMarker overlayMarker, ReadableMap map) {
        overlayMarker.setIcon(map.getString("uri"));
        if(map.hasKey("height")) {
            overlayMarker.setIconHeight(map.getInt("height"));
        }
    }

    /**
     * 是否开启近大远小效果
     * @param overlayMarker
     * @param perspective
     */
    @ReactProp(name = "perspective")
    public void setPerspective(OverlayMarker overlayMarker, boolean perspective) {
        overlayMarker.setPerspective(perspective);
    }

    @ReactProp(name = "alpha")
    public void setAlpha(OverlayMarker overlayMarker, float alpha) {
        overlayMarker.setAlpha(alpha);
    }

    @ReactProp(name = "rotate")
    public void setRotate(OverlayMarker overlayMarker, float rotate) {
        overlayMarker.setRotate(rotate);
    }

    /**
     * 是否平贴地图
     * @param overlayMarker
     * @param flat
     */
    @ReactProp(name = "flat")
    public void setFlat(OverlayMarker overlayMarker, boolean flat) {
        overlayMarker.setFlat(flat);
    }

    /**
     * 是否可拖拽
     * @param overlayMarker
     * @param draggable
     */
    @ReactProp(name = "draggable")
    public void setDraggable(OverlayMarker overlayMarker, boolean draggable) {
        overlayMarker.setDraggable(draggable);
    }

    /**
     * 是否显示infowind
     * @param overlayMarker
     * @param active
     */
    @ReactProp(name = "active")
    public void setActive(OverlayMarker overlayMarker, boolean active) {
        overlayMarker.setActive(active);
        overlayMarker.setPropActive(active);
    }

    /**
     * 覆盖物的id
     * @param overlayMarker
     * @param markerId
     */
    @ReactProp(name = "markerId")
    public void setMarkerId(OverlayMarker overlayMarker, String markerId) {
        overlayMarker.setMarkerId(markerId);
    }

    /**
     * 设置覆盖物 zIndex
     * @param overlayMarker
     * @param zIndex
     */
    @ReactProp(name = "zIndex")
    public void setZIndex(OverlayMarker overlayMarker, int zIndex) {
        overlayMarker.setZIndex(zIndex);
    }

    @ReactProp(name = "scale", defaultFloat = 1)
    public void setScale(OverlayMarker overlayMarker, float scale) {
        overlayMarker.setScale(scale);
    }

    /**
     * InfoWindow的YOffset偏移
     * @param overlayMarker
     * @param infoWindowYOffset
     */
    @ReactProp(name = "infoWindowYOffset")
    public void setInfoWindowYOffset(OverlayMarker overlayMarker, int infoWindowYOffset) {
        overlayMarker.setInfoWindowYOffset(infoWindowYOffset);
    }

    @ReactProp(name = "infoWindowMinHeight")
    public void setInfoWindowMinHeight(OverlayMarker overlayMarker, int minHeight) {
        overlayMarker.setInfoWindowMinHeight(minHeight);
    }

    @ReactProp(name = "infoWindowMinWidth")
    public void setInfoWindowMinWidth(OverlayMarker overlayMarker, int minWidth) {
        overlayMarker.setInfoWindowMinWidth(minWidth);
    }

    @ReactProp(name = "infoWindowTextSize")
    public void setInfoWindowTextSize(OverlayMarker overlayMarker, int textSize) {
        overlayMarker.setInfoWindowTextSize(textSize);
    }

}
