class BrushTool extends ResizableTool {
    constructor(name, options, switchFunction) {
        super(name, options);

        Events.on('click', this.mainButton, switchFunction, this);
        Events.on('click', this.biggerButton, this.increaseSize.bind(this));
        Events.on('click', this.smallerButton, this.decreaseSize.bind(this));

        this.resetTutorial();
        this.addTutorialTitle("Pencil tool");
        this.addTutorialKey("B", " to select the brush");
        this.addTutorialKey("Left drag", " to draw a stroke");
        this.addTutorialKey("Right drag", " to resize the brush");
        this.addTutorialKey("+ or -", " to resize the brush");
        this.addTutorialImg("/brush-tutorial.gif");
    }

    onStart(mousePos, cursorTarget) {
        super.onStart(mousePos);
        if (cursorTarget === undefined)
            return;
        new HistoryState().EditCanvas();
        
        //draw line to current pixel
        if (cursorTarget.className == 'drawingCanvas' || cursorTarget.className == 'drawingCanvas') {
            currFile.currentLayer.drawLine(
                Math.floor(mousePos[0]/currFile.zoom),
                Math.floor(mousePos[1]/currFile.zoom),
                Math.floor(mousePos[0]/currFile.zoom),
                Math.floor(mousePos[1]/currFile.zoom), 
                this.currSize
            );
        }

        currFile.currentLayer.updateLayerPreview();
	}

	onDrag(mousePos, cursorTarget) {
        super.onDrag(mousePos);

        if (cursorTarget === undefined)
            return;
        //draw line to current pixel
        if (cursorTarget.className == 'drawingCanvas' || cursorTarget.className == 'drawingCanvas') {
            currFile.currentLayer.drawLine(Math.floor(this.prevMousePos[0]/currFile.zoom),
                Math.floor(this.prevMousePos[1]/currFile.zoom),
                Math.floor(this.currMousePos[0]/currFile.zoom),
                Math.floor(this.currMousePos[1]/currFile.zoom),
                this.currSize
            );
        }
        
        currFile.currentLayer.updateLayerPreview();
	}

	onEnd(mousePos) {
        super.onEnd(mousePos);
	}

    onSelect() {
        super.onSelect();
    }

    onDeselect() {
        super.onDeselect();
    }
}