package org.osmdroid.bugtestfragments;

import android.content.DialogInterface;
import android.graphics.Color;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;

import org.osmdroid.events.MapEventsReceiver;
import org.osmdroid.samplefragments.BaseSampleFragment;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.ItemizedOverlayWithFocus;
import org.osmdroid.views.overlay.MapEventsOverlay;
import org.osmdroid.views.overlay.Marker;
import org.osmdroid.views.overlay.OverlayItem;

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

/**
 * created on 5/5/2019.
 *
 * @author Alex O'Ree
 */
public class Bug1322 extends BaseSampleFragment {
    final String description1 = "Line1\nLine2\nLine3\nLine4\nLine5\nLine6\nLine7\nLine8\nLine9\nLine10\nLine11\nLine12\nLine13\nLine14\nLine15";
    final String description2 = "Line01 Line02 Line03 Line04 Line05 Line06 Line07 Line08 Line09 Line10 Line11 "
        + "Line12 Line13 Line14 Line15 Line16 Line17 Line18 Line19 Line20 Line21 Line22 Line23";
    final String description5 = "Line1Line2Line3Line4Line5Line6Line7Line8Line9Line10Line11Line12Line13Line14Line15line16line17line18line19line20line21line22line23line24line25line26line27line28line29line30";
    final String description6 = "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
    final String description7 =
        "BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC"
            +   "BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC"
            +   "BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC";
    final String description3 = "0123456789012345678901234567890123456789012345678912345678901234"
        + "0123456789012345678901234567890123456789012345678912345678901234"
        + "0123456789012345678901234567890123456789012345678912345678901234";
    final String description4 = "Line1\nLine2\n\nLine3\nLine4\n"
        + "BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC01234567890123456789012345678901234567890123456789123456789012340123456789012345678901234567890123456789012345678912345678901234";
    @Override
    public String getSampleTitle() {
        return "ItemizedOverlayWithFocus with long titles";
    }

    private void message(final OverlayItem pItem) {
        Toast.makeText(getActivity(), pItem.getTitle() + ": " + pItem.getSnippet(), Toast.LENGTH_LONG).show();
    }
    private List<OverlayItem> mClicked = new ArrayList<>();
    @Override
    public void addOverlays(){
        super.addOverlays();
        final ItemizedOverlayWithFocus<OverlayItem> myLocationOverlay;

        final List<OverlayItem> items = new ArrayList<>();

        items.add(new OverlayItem("Title1", "a small descripotion", new GeoPoint(-3d,-3d)));
        items.add(new OverlayItem("Title1", description1, new GeoPoint(0d,0d)));
        items.add(new OverlayItem("Title2", description2, new GeoPoint(3d,3d)));
        items.add(new OverlayItem("Title3", description3, new GeoPoint(6d,6d)));
        items.add(new OverlayItem("Title4", description4, new GeoPoint(9d,9d)));
        items.add(new OverlayItem("Title5", description5, new GeoPoint(12d,12d)));
        items.add(new OverlayItem("Title6", description6, new GeoPoint(15d,15)));
        items.add(new OverlayItem("Title7", description7, new GeoPoint(18d,18)));

        ItemizedOverlayWithFocus<OverlayItem> mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(items,
            new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                @Override
                public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
                    return true;
                }
                @Override
                public boolean onItemLongPress(final int index, final OverlayItem item) {
                    return false;
                }
            }, getContext());
        mOverlay.setFocusItemsOnTap(true);
        mMapView.getOverlays().add(mOverlay);

        /*mMapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() {
            @Override
            public boolean singleTapConfirmedHelper(GeoPoint p) {
                if (mClicked.size() == 0) {
                    return false;
                }
                if (mClicked.size() == 1) {
                    message(mClicked.get(0));
                    mClicked.clear();
                    return true;
                }
                final String[] titles = new String[mClicked.size()];
                final OverlayItem[] items = new OverlayItem[titles.length];
                int i = 0;
                for(final OverlayItem item : mClicked) {
                    titles[i] = item.getTitle();
                    items[i] = item;
                    i ++;
                }
                new AlertDialog.Builder(getActivity())
                    .setItems(titles, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            message(items[i]);
                        }
                    })
                    .setNegativeButton("Cancel", null)
                    .show();
                mClicked.clear();
                return false;
            }

            @Override
            public boolean longPressHelper(GeoPoint p) {
                return false;
            }
        }));

        myLocationOverlay = new ItemizedOverlayWithFocus<>(items,
            new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                @Override
                public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
                    mClicked.add(item);
                    return false;
                }

                @Override
                public boolean onItemLongPress(final int index, final OverlayItem item) {
                    return false;
                }
            }, getContext());
        myLocationOverlay.setMarkerBackgroundColor(Color.BLUE);
        myLocationOverlay.setMarkerTitleForegroundColor(Color.WHITE);
        myLocationOverlay.setMarkerDescriptionForegroundColor(Color.WHITE);
        myLocationOverlay.setDescriptionBoxPadding(15);
        mMapView.getOverlays().add(myLocationOverlay);
        */
    }

    @Override
    public boolean skipOnCiTests(){
        return false;
    }

}