import axios from './session';
import { GET_NEWS, WRITE_NEWS, ADD_NEWS, DELETE_NEWS,
  CLEAR_WRITE, SELECT_NEWS, EDIT_NEWS, SHOW_MESSAGE } from './types';
import { showMessage } from './messages';

export const getNews = () => (
  async (dispatch) => {
    try {
      const response = await axios.get('/api/v1/news');
      dispatch({
        type: GET_NEWS,
        payload: response.data,
      });
    } catch (e) {
      console.log(e);
    }
  }
);

export const postNews = ({ title, author, text }) => (
  async (dispatch) => {
    try {
      const response = await axios.post('/api/v1/news/', {
        author,
        title,
        text,
      });
      if (response.data.id) {
        dispatch({
          type: ADD_NEWS,
          payload: response.data,
        });
        dispatch(showMessage('Hír hozzádva!', 'success'));
      } else {
        dispatch(showMessage('Nem sikerült a hírt hozáadni!', 'error'));
      }
    } catch (e) {
      dispatch(showMessage('Nem sikerült a hírt hozáadni!', 'error'));
    }
  }
);

export const editNews = ({ id, title, editedBy, text }) => (
  async (dispatch) => {
    try {
      const response = await axios.patch(`/api/v1/news/${id}/`, {
        author: editedBy,
        title,
        text,
      });
      if (response.data.id) {
        dispatch(showMessage('Hír módosítva!', 'success'));
        dispatch({
          type: EDIT_NEWS,
          payload: response.data,

        });
      } else {
        dispatch(showMessage('Nem sikerült a módosítás', 'error'));
      }
    } catch (e) {
      dispatch(showMessage('Nem sikerült a módosítás', 'error'));
    }
  }
);

export const deleteNews = news => (
  async (dispatch) => {
    try {
      const response = await axios.delete(`/api/v1/news/${news.id}/`);
      if (!response.data.id) {
        dispatch(showMessage('Sikeres törlés!', 'success'));
        dispatch({
          type: DELETE_NEWS,
          payload: news,
        });
      } else {
        dispatch(showMessage('A törlés nem sikerült!', 'error'));
      }
    } catch (e) {
      dispatch(showMessage('A törlés nem sikerült!', 'error'));
    }
  });

export const writeNews = ({ target: { name, value } }) => (
  (dispatch) => {
    dispatch({ type: WRITE_NEWS, payload: value, target: name });
  }
);

export const clearWrite = () => (
  (dispatch) => {
    dispatch({ type: CLEAR_WRITE });
  }
);

export const setSelectedNews = item => (
  (dispatch) => {
    dispatch({ type: SELECT_NEWS, payload: item });
  }
);