import { State } from "./state.js";
import * as cg from "./types.js";
import * as board from "./board.js";
import * as util from "./util.js";
import { cancel as dragCancel } from "./drag.js";

export function setDropMode(s: State, piece?: cg.Piece): void {
  s.dropmode = {
    active: true,
    piece,
  };
  dragCancel(s);
}

export function cancelDropMode(s: State): void {
  s.dropmode = {
    active: false,
  };
}

export function drop(s: State, e: cg.MouchEvent): void {
  if (!s.dropmode.active) return;

  board.unsetPremove(s);
  board.unsetPredrop(s);

  const piece = s.dropmode.piece;

  if (piece) {
    s.pieces.set("a0", piece);
    const position = util.eventPosition(e);
    const dest =
      position &&
      board.getKeyAtDomPos(position, board.whitePov(s), s.dom.bounds());
    if (dest) board.dropNewPiece(s, "a0", dest);
  }
  s.dom.redraw();
}
