package com.awesomeproject.view;

import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.uimanager.SimpleViewManager;
import android.view.View;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.bridge.ReactMethod;
import com.navigine.idl.java.NavigationManager;
import android.graphics.BitmapFactory;
import android.util.Log;
import com.navigine.view.LocationView;
import com.navigine.sdk.Navigine;
import com.navigine.idl.java.NavigineSdk;
import com.navigine.idl.java.LocationManager;
import com.navigine.idl.java.PositionListener;
import com.navigine.idl.java.Position;
import com.navigine.idl.java.AnimationType;
import com.navigine.idl.java.Point;
import com.navigine.idl.java.Polyline;
import com.navigine.idl.java.LocationPoint;
import com.navigine.idl.java.LocationPolyline;
import android.content.Context;
import com.awesomeproject.R;
import java.util.List;
import com.awesomeproject.models.ReactMapObject;
import com.navigine.idl.java.IconMapObject;
// import com.navigine.idl.java.CircleMapObject;
import com.navigine.idl.java.PolylineMapObject;
import com.awesomeproject.view.NavigineIconMapObject; 
// import com.awesomeproject.NavigineCircleMapObject; 
import com.awesomeproject.view.NaviginePolylineMapObject; 
import java.util.ArrayList;
public class NavigineLocationView extends LocationView {

    private IconMapObject mIconMapObject = null;
    // private CircleMapObject mCircleMapObject = null;
    private List<ReactMapObject> childs = new ArrayList<>();
    private ArrayList<Point> points = new ArrayList<>();
    private Context mContext = null;
    public NavigineLocationView(Context context) {
        super(context);
        mContext = context;
        super.getLocationViewController().setSublocationId(7183);
        Log.d("navigine", "" + super.getLocationViewController().getZoomFactor());
        super.getLocationViewController().setZoomFactor(3);
        Log.d("navigine", "" + super.getLocationViewController().getZoomFactor());
    }

    public void addFeature(View child, int index) {
        if (child instanceof NavigineIconMapObject){
            NavigineIconMapObject _child = (NavigineIconMapObject) child;
            IconMapObject obj = getLocationViewController().addIconMapObject();
            Log.d("navigine", "NavigineIconMapObject: " + obj);
            obj.setSize(30, 30);
            obj.setPosition(new LocationPoint(new Point(50, 10), 3046, 7183));
            obj.setBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.group));
            _child.setMapObject(obj);
            childs.add(_child);
        // }else if(child instanceof NavigineCircleMapObject){
        //     NavigineCircleMapObject _child = (NavigineCircleMapObject) child;
        //     CircleMapObject obj = getLocationViewController().addCircleMapObject();
        //     Log.d("navigine1", "NavigineCircleMapObject:" + obj);
        //     obj.setPosition(new LocationPoint(new Point(50, 20), 3046, 7183));
        //     obj.setColor(1,0,1,1);
        //     obj.setRadius(100);
        //     obj.setVisible(true);
        //     _child.setMapObject(obj);
        //     childs.add(_child);
        }else if(child instanceof NaviginePolylineMapObject){
            NaviginePolylineMapObject _child = (NaviginePolylineMapObject) child;
            PolylineMapObject obj = getLocationViewController().addPolylineMapObject();
            points.add(new Point(60, 20));
            points.add(new Point(70, 20));
            points.add(new Point(80, 20));
            Log.d("navigine", "NaviginePolylineMapObject: " + obj);
            obj.setPolyLine(new LocationPolyline(new Polyline(points), 3046, 7183));
            obj.setColor(1, 0, 1, 1);
            obj.setWidth(3);
            obj.setVisible(true);
            _child.setMapObject(obj);
            childs.add(_child);
        }
    }

    public void removeChild(int index) {
        if (index < childs.size()) {
            ReactMapObject child = childs.remove(index);
            getLocationViewController().removeIconMapObject((IconMapObject)child.getMapObject());
        }
    }
}