import { createSlice } from '@reduxjs/toolkit';

interface UserState {
    userId: number;
    userName: string;
    role: string;
    isLogin: boolean;
    uploadTraffic: number;
    downloadTraffic: number;
    downloadPoints: number;
    avatar: string;
}

const initialState: UserState = {
    userId: 0,
    userName: '',
    role: '',
    isLogin: false,
    uploadTraffic: 0,
    downloadTraffic: 0,
    downloadPoints: 0,
    avatar: '',
};


export const userSlice = createSlice({
    name: 'user',
    initialState,
    reducers: {
        login: (state, action) => {
                
            state.userId = action.payload.userId;
            state.userName = action.payload.userName;
            state.role = action.payload.role;
            state.isLogin = true;
            state.uploadTraffic = action.payload.uploadTraffic;
            state.downloadTraffic = action.payload.downloadTraffic;
            state.downloadPoints = action.payload.downloadPoints;
            state.avatar = action.payload.avatar;

            console.log('userId', state.userId);
        },
        logout: (state) => {
            state.userId = 0;
            state.userName = '';
            state.role = '';
            state.isLogin = false;
            state.uploadTraffic = 0;
            state.downloadTraffic = 0;
            state.downloadPoints = 0;
            state.avatar = '';
        },
        updateTraffic: (state, action) => {
            state.uploadTraffic = action.payload.uploadTraffic;
            state.downloadTraffic = action.payload.downloadTraffic;
            state.downloadPoints = action.payload.downloadPoints;
        },
        updateAvatar: (state, action) => {
            state.avatar = action.payload.avatar;
        }
    },

});

export const { login, logout, updateTraffic } = userSlice.actions;
export default userSlice.reducer;