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


function createDom (state) {
    let content = document.getElementById('content')
    content.innerHTML = ''
    let spanBeerAmount = document.createElement('span')
    spanBeerAmount = `Цена - 60 грн | В наличии:${state.пиво.СКОКА} шт.`
    let spanImgBeer = document.createElement('span')
    let imgBeer = document.createElement('img')
    imgBeer.src = "https://www.meme-arsenal.com/memes/a47737a30a10732b77d522f44f43ea3d.jpg"
    spanImgBeer.append(imgBeer)
    imgBeer.style.width = '200px'
    content.append(spanImgBeer)
    content.append(spanBeerAmount)
    
    let spanChipsAmount = document.createElement('span')
    spanChipsAmount = `Цена = 30 грн | В наличии: ${state.чипсы.СКОКА} пачек`
    let spanImgChips = document.createElement('span')
    spanImgChips.style.marginLeft = '50px'
    let imgChips = document.createElement('img')
    imgChips.src = "chips.png"
    imgChips.style.width = '150px'
    imgChips.style.marginRight = '30px'
    spanImgChips.append(imgChips)
    content.append(spanImgChips)
    content.append(spanChipsAmount)
    
    let spanCigarettesAmount = document.createElement('span')
    spanCigarettesAmount = `Цена:50 грн | В наличии: ${state.сиги.СКОКА} пачек`
    let spanImgCigarettes = document.createElement('span')
    let imgCigarettes = document.createElement('img')
    imgCigarettes.src = 'cigi.png'
    imgCigarettes.style.width = '200px'
    spanImgCigarettes.style.marginLeft = '10px'
    spanImgCigarettes.append(imgCigarettes)
    content.append(spanImgCigarettes)
    content.append(spanCigarettesAmount)

    let cashbox = document.createElement('span')
    let cashboxImg = document.createElement('img')
    cashboxImg.src = "kassa.png"
    cashboxImg.style.width = '200px'
    cashboxImg.style.position = 'relative'
    cashboxImg.style.top = '60px'
    cashboxImg.style.left = '50px'
    cashbox.style.position = 'relative' 
    cashbox.style.top = '5px'
    cashbox.style.left = '100px'
    cashbox.innerHTML = `В кассе: ${state.касса} грн. `
    content.append(cashboxImg)
    content.append(cashbox)
    
    
    let selectProducts = document.createElement('select')
    content.append(selectProducts)
    selectProducts.style.marginLeft = '300px'
    let option = document.createElement('option')
    option.innerHTML = 'Выберите продукт'
    selectProducts.append(option) 
    let inputAmount = document.createElement('input')
    inputAmount.type = 'number'
    content.append(inputAmount)
    inputAmount.style.marginLeft = '20px'
    inputAmount.placeholder = 'Количество товара'
    
    let beer = document.createElement('option')
    beer.innerHTML = 'пиво'
    selectProducts.append(beer)

    let chips = document.createElement('option')
    chips.innerHTML = 'чипсы'
    selectProducts.append(chips)

    let cigarettes = document.createElement('option')
    cigarettes.innerHTML = 'сиги'
    selectProducts.append(cigarettes)
    
    let btn = document.createElement('button')
    content.append(btn)
    btn.innerHTML = 'Купить'
    btn.style.marginLeft = '20px'
    
    btn.onclick = () => {
        if(state[selectProducts.value].СКОКА >= inputAmount.value){
        let amount = inputAmount.value
        let selectNum = selectProducts.value
        
        store.dispatch(купиШото(amount,selectNum))
        }
        else {
            alert('В наличие столько нету!')
        }
    }
    return state
}
function reducer(state, {type, ШО, СКОКА,БАБЛО}){
    if (!state){
        return {
            пиво: {СКОКА:100,БАБЛО:60},
            чипсы: {СКОКА:100,БАБЛО:30},
            сиги: {СКОКА:100 , БАБЛО:50},
            касса: 0
        }
    }
    if (type === 'КУПИТЬ'){
        return {
            ...state,
            [ШО]: {...state[ШО], СКОКА: state[ШО].СКОКА - СКОКА },
            касса: state[ШО].БАБЛО * СКОКА + state.касса
        }
    }

    return state
}




const store = createStore(reducer)
const unsubscribe2 = store.subscribe(() => console.log('подписчик 2', store.getState()))
const shop = store.subscribe(() => createDom(store.getState()))
const купиПиво = СКОКА => ({type: 'КУПИТЬ', ШО: "пиво", СКОКА})
const купиЧипсы = СКОКА => ({type: 'КУПИТЬ', ШО: "чипсы", СКОКА})
const купиСиги = СКОКА => ({type: 'КУПИТЬ', ШО: "сиги", СКОКА})
const купиШото = (ШО,СКОКА) => ({type: 'КУПИТЬ', ШО, СКОКА})
store.dispatch(купиПиво(0))
store.dispatch(купиЧипсы(0))
store.dispatch(купиСиги(0))







  




