package sklep;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Katalog {
	private Map<Integer, Towar> towaryWgId = new HashMap<>();
	private Map<String, Towar> towaryWgNazw = new HashMap<>();

	public void dodaj(Towar towar) {
		towaryWgId.put(towar.getId(), towar);
		towaryWgNazw.put(towar.getNazwa(), towar);		
	}
	
	public Towar szukajWgId(int id) throws NieznanyTowar {
		if(towaryWgId.containsKey(id)) {
			return towaryWgId.get(id);
		} else {
			throw new NieznanyTowar("Nieznany towar nr " + id);
		}
	}

	public Towar szukajWgNazwy(String nazwa) throws NieznanyTowar {
		if(towaryWgNazw.containsKey(nazwa)) {
			return towaryWgNazw.get(nazwa);
		} else {
			throw new NieznanyTowar("Nieznany towar " + nazwa);
		}
	}

	public void zmienCene(String nazwa, BigDecimal zmiana) throws NieznanyTowar {
		
		Towar towar = szukajWgNazwy(nazwa);
		towar.setCenaNetto(towar.getCenaNetto().multiply(BigDecimal.ONE.add(zmiana)).setScale(2, RoundingMode.HALF_UP));
	}

	public void zmienWszystkieCeny(BigDecimal zmiana) {
		for (Towar towar : towaryWgId.values()) {
			towar.setCenaNetto(towar.getCenaNetto().multiply(BigDecimal.ONE.add(zmiana)).setScale(2, RoundingMode.HALF_UP));
		}
		
	}

	public Collection<String> nazwyTowarow() {
		return towaryWgNazw.keySet();
	}

	public void usunTowar(String nazwa) throws NieznanyTowar {
		if(towaryWgNazw.containsKey(nazwa)) {
			Towar usuwany = towaryWgNazw.remove(nazwa);
			towaryWgId.remove(usuwany.getId());
		} else {
			throw new NieznanyTowar("Nieznany towar " + nazwa);
		}
		
	}

	public boolean jestTowar(String nazwa) {
		return towaryWgNazw.containsKey(nazwa);
	}

	
}
