function reducer(state, {type, ШО, СКОКА}){ 
    
    if (!state){ 
        return {
            пиво: {number : 300, price : 40},
            чипсы: {number : 50, price : 30},
            сиги: {number : 100, price : 70},
            кола: {number: 80, price: 20},
            шоколад: {number: 30, price: 25},
            бабло: {cashbox : 0, mycash : 2000}
        }
    }
    if (type === 'КУПИТЬ' && (state[ШО].number) >= 0 && state.бабло.mycash - state[ШО].price * СКОКА >= 0) {
        return {
            ...state, 
            [ШО]: {...state[ШО], number: state[ШО].number - СКОКА},
            бабло: {
                mycash: state.бабло.mycash - state[ШО].price * СКОКА,
                cashbox: state.бабло.cashbox + state[ШО].price * СКОКА
            }
        }
    }
    return state 
}

function createStore(reducer){
    let state       = reducer(undefined, {})  
    let cbs         = []                     
    
    const getState  = () => state            
    const subscribe = cb => (cbs.push(cb),   
                             () => cbs = cbs.filter(c => c !== cb)) 
                             
    const dispatch  = action => { 
        const newState = reducer(state, action) 
        if (newState !== state){ 
            state = newState  
            for (let cb of cbs)  cb() 
        }
    }
    
    return {
        getState, 
        dispatch,
        subscribe 
    }
}

const store = createStore(reducer)
console.log(store.getState())

let productN = document.getElementById("product");
let numberN = document.getElementById("number");
let buttonN = document.getElementById("button");

let pivoN = document.getElementById("pivo").innerHTML= store.getState().пиво.number + ' шт'
let chipsN = document.getElementById("chips").innerHTML= store.getState().чипсы.number + ' шт'
let sigiN = document.getElementById("sigi").innerHTML= store.getState().сиги.number + ' шт'
let colaN = document.getElementById("cola").innerHTML= store.getState().кола.number + ' шт'
let chokN = document.getElementById("chok").innerHTML= store.getState().шоколад.number + ' шт'

let pivoM = document.getElementById("pivoK").innerHTML= store.getState().пиво.price + ' грн'
let chipsM = document.getElementById("chipsK").innerHTML= store.getState().чипсы.price + ' грн'
let sigiM = document.getElementById("sigiK").innerHTML= store.getState().сиги.price + ' грн'
let colaM = document.getElementById("colaK").innerHTML= store.getState().кола.price + ' грн'
let chokM = document.getElementById("chokK").innerHTML= store.getState().шоколад.price + ' грн'

let kassaN = document.getElementById("kassa").innerHTML= store.getState().бабло.cashbox + ' грн'
let moneyN = document.getElementById("money").innerHTML= store.getState().бабло.mycash + ' грн'

buttonN.onclick = () => {
    store.dispatch({type: 'КУПИТЬ', ШО: productN.value, СКОКА: numberN.value})
    let pivoN = document.getElementById("pivo").innerHTML= store.getState().пиво.number + ' шт'
    let chipsN = document.getElementById("chips").innerHTML= store.getState().чипсы.number + ' шт'
    let sigiN = document.getElementById("sigi").innerHTML= store.getState().сиги.number + ' шт'
    let colaN = document.getElementById("cola").innerHTML= store.getState().кола.number + ' шт'
    let chokN = document.getElementById("chok").innerHTML= store.getState().шоколад.number + ' шт'
    let kassaN = document.getElementById("kassa").innerHTML= store.getState().бабло.cashbox + ' грн'
    let moneyN = document.getElementById("money").innerHTML= store.getState().бабло.mycash + ' грн'
}

