package com.example.demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.stereotype.*;

// Uzasadnieniem dla tego, aby oblicz nie było metodą statyczną niech będzie zapamiętywanie historii działań kalkulatora...

// Gdy chcemy klasę oznaczyć jako komponent, żeby Spring utworzył instancję i pozwalał ją wstrzykiwać,
// można użyć jednej z adnotacji: @Component @Service @Repository @Controller
@Component
public class LogikaKalkulatoraImpl implements LogikaKalkulatora {
	private List<String> historiaDzialan = Collections.synchronizedList(new ArrayList<>());

	public List<String> getHistoriaDzialan() {
		return Collections.unmodifiableList(historiaDzialan);
	}

	public int oblicz(int x, int y, String operacja) {
		historiaDzialan.add(String.format("%d %s %d", x, operacja, y));

		switch(operacja) {
		case "+": return x + y;
		case "-": return x - y;
		case "*": return x * y;
		case "/": return x / y;
		default : return 0;
		}
	}

}
