// общие правила

// * влияние на store (изменение state) происходит через store.dispatch(какой-то экшон криейтор(какие-то параметры))
// * отображение состояния state на экране происходит через store.subscribe(какая-то ваша функция, которая делает 
// store.getState() и меняет DOM)

// Менять код createStore не надо

// Задачи

// * сделать отображение всего того, что есть в ларьке (можете хоть витрину нарисовать, если интересно) с количествами;
// * сделать select для выбора товара и input type='number' для выбора количества и кнопку "купить", которая посылает action
// в store используя actionCreator для создания action
// * добавить в reducer проверку на уход в минус, что бы нельзя было продать то, чего нет в должном количестве.
// * добавить в state цену каждого товара и поле касса. Для этого вместо структуры вида beer: 100 используйте beer: 
// КАКОЙ-ТО ОБЪЕКТ С КОЛИЧЕСТВОМ И СТОИМОСТЬЮ ОДНОЙ ЕДИНИЦЫ. В action добавьте поле "бабло". 
// Всё это пишется в reducer, не забудьте проверки что бабла хватает.
// * добавьте в интерфейс поле для денег.

function reducer(state, { type, obj, amount }) {

    if (!state) {
        return {
            beer: { number: 100, price: 5 },
            chips: { number: 50, price: 3 },
            smoke: { number: 50, price: 7 },
            cash: { cashbox: 0, mycash: 100 }
        }
    }
    if (type === 'BUY') {
        if ((state[obj].number) >= 0 && state.cash.mycash - state[obj].price * amount >= 0) {
            if ((amount >= 0)) {
                return {
                    ...state,
                    [obj]: { ...state[obj], number: state[obj].number - amount },
                    cash: {
                        mycash: state.cash.mycash - state[obj].price * amount,
                        cashbox: state.cash.cashbox + state[obj].price * amount
                    }
                }
            }
            if (amount < 0){
                return{
                    ...state, cashbox: state.cashbox * 0
                }
            }
        }
    }
    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().beer.number
let chipsN = document.getElementById("chips").innerHTML = store.getState().chips.number
let sigiN = document.getElementById("sigi").innerHTML = store.getState().smoke.number

let pivoM = document.getElementById("pivoK").innerHTML = store.getState().beer.price + '$'
let chipsM = document.getElementById("chipsK").innerHTML = store.getState().chips.price + '$'
let sigiM = document.getElementById("sigiK").innerHTML = store.getState().smoke.price + '$'

let kassaN = document.getElementById("kassa").innerHTML = store.getState().cash.cashbox + '$'
let moneyN = document.getElementById("money").innerHTML = store.getState().cash.mycash + '$'

buttonN.onclick = () => {
    store.dispatch({ type: 'BUY', obj: productN.value, amount: numberN.value })
    let pivoN = document.getElementById("pivo").innerHTML = store.getState().beer.number
    let chipsN = document.getElementById("chips").innerHTML = store.getState().chips.number
    let sigiN = document.getElementById("sigi").innerHTML = store.getState().smoke.number
    let kassaN = document.getElementById("kassa").innerHTML = store.getState().cash.cashbox + '$'
    let moneyN = document.getElementById("money").innerHTML = store.getState().cash.mycash + '$'
}
