import axios from 'axios';

// Types
import { SET_CHARACTER_LOADING, GET_CHARACTER } from 'redux/types/actions';
import AppState from 'redux/types/app';
import { ActionCreator, Action } from 'redux';
import { ThunkAction } from 'redux-thunk';

const getCharacters: ActionCreator<ThunkAction<
  Promise<any>,
  AppState,
  any,
  Action
>> = (name: string) => async dispatch => {
  dispatch({ type: SET_CHARACTER_LOADING, payload: true });

  try {
    const { data } = await axios.get(
      process.env.REACT_APP_API_URI + `/characters/${name}`
    );

    dispatch({ type: GET_CHARACTER, payload: data });
  } catch (error) {
    dispatch({ type: GET_CHARACTER, payload: false });
  }

  dispatch({ type: SET_CHARACTER_LOADING, payload: false });
};

export default getCharacters;