import {http} from '@/utils';
import {encrypt} from '@/components/passport/encryption';
import jsCookie from 'js-cookie'


const accountLogin = user => dispatch => {
  return http.post(`${API['passport-api']}/m/login/accountLogin`, {
    user_name: user.username,
    password: encrypt(user.password),
    is_encrypt: 1,
    redirect: encodeURIComponent(user.redirect),
  }).then(res => {
    return storeUser(res, dispatch)
  })
}

const studentLogin = params => dispatch => {
  return http.post(`${API['passport-api']}/phone_reg`, {
    phone: params.tel,
    password: params.password,
    code: params.code,
    area_code: params.num,
    school_name: params.school,
    college_name: params.college,
    student_id: params.uid,
    student_name: params.name,
    redirect: encodeURIComponent(params.redirect),
    type: 1,
  }).then(res => {
    const {errno, data} = res.data;
    let result = {};
    if (errno === 0) {
      result = {
        data: {
          errno: 200,
          data,
        },
      };
    } else {
      result = res;
    }
    return storeUser(result, dispatch);
  });
}

const quickLogin = user => dispatch => {
  return http.post(`${API['passport-api']}/m/login/quickLogin`, {
    ...user,
    plat: 5,
  }).then(res => {
    return storeUser(res, dispatch)
  })
}

const storeUser = (res, dispatch) => {
  const data = res.data
  let payload
  if (data.errno === 200) {
    const {user_name: username, avatar_file: avatar, is_vip: isVIP, ...rest} = data.data.user_info
    payload = {
      hasError: false,
      msg: data.msg,
      data: {username, avatar, isVIP, ...rest},
    }
  } else {
    payload = {
      hasError: true,
      msg: data.msg,
      data: {},
      code: data.errno,
    }
  }
  dispatch(setCurrentUser(payload))
  return payload

}


const SET_CURRENT_USER = 'SET_CURRENT_USER'
const setCurrentUser = payload => ({
  type: SET_CURRENT_USER,
  payload: {...payload, isFetching: false},
})


const LOGOUT = 'LOGOUT'
const logout = () => dispatch => {
  jsCookie.remove('token', {path: '/', domain: '.julyedu.com'})
  jsCookie.remove('uid', {path: '/', domain: '.julyedu.com'})
  dispatch(setCurrentUser({hasError: true}))
}


const UPDATE_USER = 'UPDATE_USER'
const updateUser = payload => ({
  type: UPDATE_USER,
  payload,
})

const START_FETCH_USER = 'START_FETCH_USER'
const startFetchUser = () => ({
  type: START_FETCH_USER,
})

const END_FETCH_USER = 'END_FETCH_USER'
const endFetchUser = () => ({
  type: END_FETCH_USER,
})


export {
  accountLogin,
  studentLogin,
  SET_CURRENT_USER,
  setCurrentUser,
  quickLogin,
  logout,
  UPDATE_USER,
  updateUser,
  START_FETCH_USER,
  startFetchUser,
  END_FETCH_USER,
  endFetchUser,
}