import * as actions from '../actions/index.js';
import * as d2Tools from '../constants/d2Tools.js';
import * as contextTools from '../constants/contextTools.js';
// import createDebug from 'debug';
// const debug = createDebug('d3d:util:undoFilter');

const INCLUDE = [
  `${actions.TRACE_FLOOD_FILL}_FULFILLED`,
  `${actions.ADD_IMAGE}_FULFILLED`,
  actions.TOGGLE_SELECT,
  actions.TRANSFORM_END,
  actions.MULTITOUCH_TRANSFORM_END,
  actions.SELECT_ALL,
  actions.DESELECT_ALL,
  actions.STAMP,
  actions.SELECT,
  actions.D2_TEXT_ADD,
  actions.CLEAR,
  actions.TWIST_END,
  actions.SCULPT_END,
  actions.ADD_SCULPT_HANDLE,
  actions.REMOVE_SCULPT_HANDLE,
  actions.HEIGHT_END,
  actions.DELETE_SELECTION,
  actions.DUPLICATE_SELECTION,
  actions.UNION,
  actions.INTERSECT
];

const ACTION_INCLUDES = {
  [actions.D2_DRAG_END]: [...d2Tools.SHAPE_TOOLS, ...d2Tools.PEN_TOOLS, d2Tools.ERASER],
  [actions.D2_TAP]: [...d2Tools.SHAPE_TOOLS, d2Tools.BUCKET, d2Tools.ERASER]
};

const CONTEXT_TOOL_CHANGES = [
  contextTools.ALIGN_LEFT,
  contextTools.ALIGN_HORIZONTAL,
  contextTools.ALIGN_RIGHT,
  contextTools.ALIGN_TOP,
  contextTools.ALIGN_VERTICAL,
  contextTools.ALIGN_BOTTOM
];

export default function undoFilter(action, currentState) {
  if (INCLUDE.indexOf(action.type) !== -1) return true;
  if (ACTION_INCLUDES[action.type] && ACTION_INCLUDES[action.type].indexOf(currentState.d2.tool) !== -1) {
    return true;
  }
  if (action.type === actions.CONTEXT_CHANGE_TOOL && CONTEXT_TOOL_CHANGES.includes(action.tool)) return true;

  return false;
}
