import {VELOCITY_VECTOR_COLOR} from '../config.js';
import {Tool} from '../tool.js';
import {add, components, direction, div, magnitude} from '../vector.js';

export class CameraTool extends Tool {
  setContainer(container) {
    super.setContainer(container);

    // Use the main sim display, but create a placeholder and draw inside it.
    // That way we aren't blocking the main display more than necessary
  }

  constructor() {
    super();

    this.div.style.width = '150px';
    this.div.style.height = '150px';
  }

  frame() {
    if (!this.container.expanded) return;

    const {display, panning} = this.sim;
    const {left, top, width, height} = this.div.getBoundingClientRect();
    const vecScale = this.sim.getOption('display.velocityScale');

    // Draw a vector for the camera velocity
    const offset = add(display.viewOrigin, div({x: left, y: top}, display.scale));
    const start = add(offset, div({x: width, y: height}, 2 * display.scale));
    let speed = magnitude(panning.velocity);
    let arrowLength = Math.log10(speed + 1) * vecScale;
    const arrowDirection = direction(panning.velocity);
    if (!this.sim.getOption('display.zoomVectors')) {
      arrowLength /= display.scale;
    }
    const end = add(start, components(arrowLength, arrowDirection));
    display.drawArrow(start.x, start.y, end.x, end.y, {
      style: VELOCITY_VECTOR_COLOR,
      ifShort: 'head',
    });
  }
}
