package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport

import java.math.BigDecimal
import java.math.MathContext
import java.math.RoundingMode
import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
import org.eclipse.swt.widgets.Event
import org.eclipse.swt.widgets.Listener
import org.eclipse.swt.widgets.ScrollBar

import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*

class ScrollBarHandler implements Listener {
	
	val static MAX_SCROLL_SIZE = new BigDecimal(Integer::MAX_VALUE)
	
	//
	
	val ScrollBar scrollBar
	val ViewportAxis viewportAxis
	
	val BigDecimal minThumb
	val int minIncrement
	val int minPageIncrement
	val BigDecimal maxScrollSelection

	new(ScrollBar scrollBar, ViewportAxis viewportAxis) {
		this.scrollBar = scrollBar
		this.viewportAxis = viewportAxis
		
		scrollBar.thumb = 0
		scrollBar.increment = 0
		scrollBar.pageIncrement = 0
		
		minThumb = new BigDecimal(scrollBar.thumb)
		minIncrement = scrollBar.increment
		minPageIncrement = scrollBar.pageIncrement
		maxScrollSelection = MAX_SCROLL_SIZE - minThumb
	}

	override handleEvent(Event event) {
		val maxPixelOrigin = viewportAxis.underlyingAxis.pixelSize - viewportAxis.visiblePixelSize
		val maxPixelSize = maxPixelOrigin * (MAX_SCROLL_SIZE / maxScrollSelection)
		val intToPixel = BigDecimal::ONE.max(maxPixelSize.divide(MAX_SCROLL_SIZE, new MathContext(maxPixelSize.precision, RoundingMode::CEILING)))
		viewportAxis.pixelOrigin = new BigDecimal(scrollBar.selection) * intToPixel
		recalculateScrollBarSize
	}

	def void recalculateScrollBarSize() {
		val visiblePixelSize = viewportAxis.visiblePixelSize
		val maxPixelOrigin = viewportAxis.underlyingAxis.pixelSize - visiblePixelSize
		
		val maxPixelSize = maxPixelOrigin * (MAX_SCROLL_SIZE / maxScrollSelection)
		val pixelToInt = BigDecimal::ONE.min(MAX_SCROLL_SIZE.divide(maxPixelSize, new MathContext(maxPixelSize.precision, RoundingMode::CEILING)))
		
		scrollBar.maximum = (maxPixelSize * pixelToInt).intValue
		scrollBar.selection = (viewportAxis.pixelOrigin * pixelToInt).intValue
		
		if (visiblePixelSize < maxPixelSize && visiblePixelSize != 0) {
			scrollBar.thumb = minThumb.max(visiblePixelSize * pixelToInt).intValue
			// Increment by size of segment 0 or 1/4 of visible pixel size, whichever is smaller
			val increment = viewportAxis.getPixelSizeOfSegmentPosition(0).min(viewportAxis.visiblePixelSize / new BigDecimal(4))
			scrollBar.increment = Math::max(minIncrement, increment.intValue)
			scrollBar.pageIncrement = Math::max(minPageIncrement, scrollBar.thumb)
			
			scrollBar.enabled = true
			scrollBar.visible = true
		} else {
			scrollBar.thumb = scrollBar.maximum
			
			scrollBar.enabled = false
			scrollBar.visible = false
		}
	}
	
}