//Make sure canvasses are in the correct position
var mouseIsDown=false;
var selectedMenuItemName="";
var selectedMenuYOffset=0;

const selectMenuNames = ["link", "router", "firewall", "hub", "switch",
	"pc", "laptop", "server", "ip_phone", "printer",
	"copier", "microwave", "fluorescent",
	"wap", "wrepeater", "wbridge", "wrepeater"];

var cachedSelectMenuCanvas=null; 


var menuItemSize=50;


function InitializeSelectMenu() {
	cachedSelectMenuCanvas = document.createElement('canvas');
	cachedSelectMenuCanvas.width = menuItemSize;
	console.log("length= " + selectMenuNames.length);
	cachedSelectMenuCanvas.height = menuItemSize * selectMenuNames.length;
	var cSMCctx = cachedSelectMenuCanvas.getContext('2d');
	var starty = 0;

	selectMenuNames.forEach((element) => {
		//console.log("Printing to select: "+ element);
		cSMCctx.drawImage(imageCollection[element], 0, starty, menuItemSize, menuItemSize);
		starty += menuItemSize;
	});
}


function drawSelectMenu()
{
    //console.log("Printing on main canvass");

    MainCanvas_ctx.fillStyle = maincanvasBackground;
    MainCanvas_ctx.fillRect(0, 0, menuItemSize, MainCanvas.height);
	if (selectedMenuYOffset < 0) selectedMenuYOffset = 0;

	if (cachedSelectMenuCanvas == null) InitializeSelectMenu();//initialize it if not done yet
    if(selectedMenuYOffset + MainCanvas.height > cachedSelectMenuCanvas.height) selectedMenuYOffset = cachedSelectMenuCanvas.height -MainCanvas.height;
    MainCanvas_ctx.drawImage(cachedSelectMenuCanvas,0,selectedMenuYOffset,50,MainCanvas.height,0,0,50,MainCanvas.height);
    let index = selectMenuNames.indexOf(selectedMenuItemName);

    if(index > -1)
    {
	//We have a selected menu item
	const cachedSelectMenuCanvasOverlay = document.createElement('canvas');
	let boxwidth=3;
	cachedSelectMenuCanvasOverlay.width = cachedSelectMenuCanvas.width;
	cachedSelectMenuCanvasOverlay.height = cachedSelectMenuCanvas.height;
	var overlay = cachedSelectMenuCanvasOverlay.getContext("2d");
	let ty = index * menuItemSize;
	overlay.beginPath();
	overlay.lineWidth = boxwidth;
	overlay.strokeStyle = "green";
	overlay.rect(boxwidth,ty,menuItemSize-(boxwidth * 2),menuItemSize);
	overlay.stroke();
	MainCanvas_ctx.drawImage(cachedSelectMenuCanvasOverlay,0,selectedMenuYOffset,50,MainCanvas.height,0,0,50,MainCanvas.height);
	//console.log("drawing select box around 0," + ty + " -> " + menuItemSize);
    }

    //Now, if we have more to the top or bottom, draw the arrows showing as much
    if(selectedMenuYOffset > (menuItemSize / 2))
    {
	//We have one item above us.  Draw the arrow
	//console.log("Drawing up arrow");
	MainCanvas_ctx.drawImage(imageFromName("ArrowUp"),0,0,50,25);
    }
    //Now, if we have more to the top or bottom, draw the arrows showing as much
    if(selectedMenuYOffset + (MainCanvas.height + 25) < cachedSelectMenuCanvas.height) 
    {
	//We have one item below us.  Draw the arrow
	//console.log("Drawing down arrow");
	MainCanvas_ctx.drawImage(imageFromName("ArrowDown"),0,MainCanvas.height - 25,50,25);
    }
}


function SelectMenu_handleMouseDown(evt)
{
    mouseDownLocation = copyLocation(evt);
    mouseIsDown=true;
}

function SelectMenu_handleMouseUp(evt)
{
    mouseIsDown=false;
    //console.log("mouseup");
    //See if we have a mouse click
    let deltaX = Math.abs(evt.pageX - mouseDownLocation.pageX);
    let deltaY = Math.abs(evt.pageY - mouseDownLocation.pageY);
    //console.log("delta " + deltaX + "," + deltaY);
    if(deltaY < 3 && deltaX <3)
    {
	//We did not move much.  Assume click
	if(evt.pageX <= menuItemSize && !mouseDidMovement)
	{
	    //We are in the item select menu.
	    let actualMenuLocation = selectedMenuYOffset + evt.pageY;
	    let newitemindex = Math.floor( actualMenuLocation / menuItemSize);
	    console.log("clicked on item " + selectMenuNames[newitemindex]);
	    selectedMenuItemName = selectMenuNames[newitemindex];
	    drawSelectMenu();
	}
    }
    mouseDidMovement=false; //reset it after we raise the button
}


function SelectMenu_handleMouseMove(evt)
{
    if(mouseIsDown)
    {
	let deltaX = evt.pageX - mouseDownLocation.pageX;
	let deltaY = evt.pageY - mouseDownLocation.pageY;
	if(isNaN(deltaY)) deltaY=0;
	if(isNaN(deltaX)) deltaX=0;
	//we are dragging
	//console.log('mousemove ' + evt.pageX + " " + evt.pageY + "  delta " + deltaY );
	selectedMenuYOffset-=deltaY;
	mouseDownLocation = copyLocation(evt); //reset the pointer
	drawSelectMenu();
	mouseDidMovement=true;
    }
}

function copyLocation({ pageX, pageY }) {
  return { pageX, pageY };
}