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.content.Context;
import com.facebook.react.bridge.ReactApplicationContext;

import android.view.ViewGroup;
import android.widget.VideoView;
import android.net.Uri;
import android.util.Log;
import com.navigine.sdk.Navigine;
import com.navigine.idl.java.NavigineSdk;
import com.navigine.idl.java.IconMapObject;
import com.navigine.idl.java.LocationManager;
import com.navigine.idl.java.PositionListener;
import com.navigine.idl.java.Position;
import com.facebook.react.views.view.ReactViewGroup;
import com.navigine.idl.java.MapObject;
import com.awesomeproject.models.ReactMapObject;
import java.util.ArrayList;
import com.navigine.idl.java.Point;
import com.navigine.idl.java.LocationPoint;

public class NavigineIconMapObject extends ViewGroup implements ReactMapObject {

    private LocationPoint locationPoint = null;
    private IconMapObject mapObject = null;
    private View _childView;
    private ArrayList<View> childs = new ArrayList<>();

    private OnLayoutChangeListener childLayoutListener = new OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
            updateMarker();
        }
    };

    public NavigineIconMapObject(Context context) {
        super(context);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
    }

    public void setMapObject(MapObject obj) {
        mapObject = (IconMapObject) obj;
        updateMarker();
    }

    public MapObject getMapObject() {
        return mapObject;
    }
    public void setChildView(View view) {
        if (view == null) {
            _childView.removeOnLayoutChangeListener(childLayoutListener);
            _childView = null;
            updateMarker();
            return;
        }
        _childView = view;
        _childView.addOnLayoutChangeListener(childLayoutListener);
    }

    private void updateMarker(){
        if(mapObject != null && locationPoint != null){
            mapObject.setPosition(locationPoint);
        }
    }

    public void addChildView(View view, int index) {
        childs.add(index, view);
        setChildView(childs.get(0));
    }

    public void removeChildView(int index) {
        childs.remove(index);
        setChildView(childs.size() > 0 ? childs.get(0) : null);
    }
    public void setPosition(LocationPoint _locationPoint) {
        locationPoint = _locationPoint;
        updateMarker();
    }


}
