import { http, api } from '@/utils'


export const RECEIVE_MY_COURSES = 'RECEIVE_MY_COURSES'
export const receiveMyCourses = payload => ({
    type: RECEIVE_MY_COURSES,
    payload
})


const PAGE_INTERVAL = 1
export const NUM_INTERVAL = 10
export const fetchCoursesListIfNeeded = () => (dispatch, getState) => {
    const myCourses = getState().myCourses
    const {switchTab, page, noMore} = myCourses
    if (!switchTab && !noMore) {
        dispatch(getMyCourses({
            page: page + PAGE_INTERVAL,
            num: NUM_INTERVAL
        }))
    }
}

export const getMyCourses = payload => dispatch => {
    dispatch(startFetchingCourses)
    return http.get(`${api.home}/m/my_course/${payload.page}/${payload.num}`)
        .then(res => {
            const {data, code, msg} = res.data
            if (data.length === 0) {
                dispatch(nomoreCourse())
                return
            }
            if (data.length % 10 !== 0) {
                dispatch(nomoreCourse())
            }
            dispatch(receiveMyCourses({
                courseList: data,
                statusCode: code,
                msg: msg,
                page: payload.page,
                num: payload.num
            }))
        })
}

export const SWITCH_TAB = 'SWITCH_TAB'
export const switchTab = payload => ({
    type: SWITCH_TAB,
    payload
})

export const NOMORE_COURSE = 'NOMORE_COURSES'
export const nomoreCourse = () => ({
    type: NOMORE_COURSE
})

export const START_FETCHING_COURSES = 'START_FETCHING_COURSES'
export const startFetchingCourses = () => {
    return {type: START_FETCHING_COURSES, payload: {isLoading: true}}
}