import {
  showWindow,
  shutdownApplication
} from './common_actions';

let ErrorActions = [];

export const CLEAR_ERROR = 'error/clearError';
export const clearError = () => {
  return {
    type: CLEAR_ERROR,
    payload: null,
  };
};

export const dismissError = () => {
  return (dispatch, getState) => {
    dispatch(clearError());
    const errorAction = ErrorActions[0];
    ErrorActions = ErrorActions.splice(1);
    if (errorAction) {
      errorAction();
    }
    if (getState().error.ErrorCritical) {
      dispatch(shutdownApplication());
    }
  };
};

export const notifyError = (msg, critical, callback) => {
  return dispatch => {
    ErrorActions = [callback, ...ErrorActions];
    msg = msg ? msg.toString() : 'Unknown Error';
    dispatch(setErrorInfo(msg, critical));
    dispatch(showWindow());
  };
};

export const SET_ERROR_INFO = 'error/setErrorInfo';
export const setErrorInfo = (msg, critical) => {
  return {
    type: SET_ERROR_INFO,
    payload: {
      msg,
      critical
    }
  }
};