import axios from 'axios';
import url from '@/plugins/routes';

const state = {
    users: [],
    allUsers: []
};

const mutations = {
    setAllUsers: (state, users) => {
        state.allUsers = []
        state.allUsers = users
        for (let i = 0; i < state.allUsers.length; i++) {
            state.allUsers[i].fullName = state.allUsers[i].firstname + " " + state.allUsers[i].lastname
        }
    },
    setUsers: (state, users) => {
        // eslint-disable-next-line no-console
        console.log(users)
        for (let user in users) {
            // eslint-disable-next-line no-console
            console.log(user)
            let existuser = state.users.find(a => {return user === a.username})

            if (existuser) {
                existuser.sername = users[user].username
                existuser.firstname = users[user].firstname
                existuser.lastname = users[user].lastname
                existuser.locked = users[user].locked
                existuser.amount = users[user].amount
                existuser.type = users[user].type
            } else {
                state.users.push({
                    username: users[user].username,
                    firstname: users[user].firstname,
                    lastname: users[user].lastname,
                    locked: users[user].locked,
                    amount: users[user].amount,
                    type: users[user].type
                })
            }
        }
        // eslint-disable-next-line no-console
        console.log(state.users)
        mutations.sortUsers(state)
    },
    sortUsers: (state) => {
        state.users = state.users.sort((a,b) => {
            if (a.lastname > b.lastname) return 1
            if (a.lastname < b.lastname) return -1
            if (a.firstname > b.firstname) return 1
            if (a.firstname < b.firstname) return -1
            return 0
        })
    },

};

const actions = {
    // eslint-disable-next-line no-unused-vars
    async getUsers({commit, rootState, dispatch}) {
        try {
            const response = await axios.get(url.bar, {headers: {Token: rootState.login.user.accessToken}})
            // eslint-disable-next-line no-console
            console.log(response.data)
            commit('setUsers', response.data)
        } catch (e) {
            if (e.response) if (e.response.status === 401) dispatch('logout', null, {root: true})
        }
    },
    async addAmount({commit, rootState, dispatch}, data) {
        try {
            const response = await axios.post(url.barAddAmount, {userId: data.username, amount: data.amount}, {headers: {Token: rootState.login.user.accessToken}})
            commit('setUsers', {[response.data.username]: response.data})
        } catch (e) {
            if (e.response) if (e.response.status === 401) dispatch('logout', null, {root: true})
        }
    },
    async addCreditList({commit, rootState, dispatch}, data) {
        try {
            const response = await axios.post(url.barGetUser, {userId: data.username}, {headers: {Token: rootState.login.user.accessToken}})
            commit('setUsers', {[response.data.username]: response.data})
        } catch (e) {
            if (e.response) if (e.response.status === 401) dispatch('logout', null, {root: true})
        }
    },
    async getAllUsers({commit, rootState, dispatch}) {
        // eslint-disable-next-line no-console
        console.log('hier bin ich')
        try {
            const response = await axios.post(url.searchUser, {searchString: ""}, {headers: {Token: rootState.login.user.accessToken}})
            // eslint-disable-next-line no-console
            console.log(response)
            commit('setAllUsers', response.data)
        } catch (e) {
            // eslint-disable-next-line no-console
            console.log(e)
            if (e.response) if (e.response.data === 401) dispatch('logout', null, {root: true})
        }
    }

};

const getters = {
    users: (state) => { return state.users },
    allUsers: (state) => { return state.allUsers }
};

export default {
    namespaced: true,
    state,
    mutations,
    actions,
    getters
}