<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Redux</title>
</head>
<body>

	<!-- <input type="text" id="tovar"> -->
	<select id='tovar'>
		<option value="пиво">пиво</option>
		<option value="чипсы">чипсы</option>
		<option value="сиги">сиги</option>
	</select>
	<input type="number" id="skok">
	<button id="btn">Купить</button>

	<script>
		function reducer(state, {type, ШО, СКОКА}){
    	if (!state){ 
       		return {
            	пиво: 100,
            	чипсы: 100,
            	сиги: 100
        	}
    	}
    	if (type === 'КУПИТЬ'){ 
        	return {
            	...state, 
            	[ШО]: state[ШО] - СКОКА 
        	}
    	}
    	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 
    		}
		}
		
		let store=createStore(reducer);
		btn.onclick=function(){
			for(let [key] of Object.entries(store.getState())){
				if(tovar.value===key){
					store.dispatch({type: 'КУПИТЬ', ШО: tovar.value, СКОКА: skok.value});
					console.log(store.getState())
				}
			}
		}

		let table=document.createElement('table');
		for(let [key,value] of Object.entries(store.getState())){
			let tr=document.createElement('tr');
			let td=document.createElement('td');
			td.innerText=key+':'+value;
			tr.append(td);
			table.append(tr);
		}
		document.body.append(table);

		

		const unsubscribe=store.subscribe(()=>{
			while (table.hasChildNodes()) {
    			table.removeChild(table.firstChild);
			}
			for(let [key,value] of Object.entries(store.getState())){
			let tr=document.createElement('tr');
			let td=document.createElement('td');
			td.innerText=key+':'+value;
			tr.append(td);
			table.append(tr);
		}
		document.body.append(table);
		})

		console.log(store.getState());
	</script>
</body>
</html>