package sklep.soap;

import java.time.LocalDateTime;
import java.util.List;

import jakarta.jws.WebParam;
import jakarta.jws.WebResult;
import jakarta.jws.WebService;
import sklep.db.DBConnection;
import sklep.db.DBException;
import sklep.db.ProductDAO;
import sklep.model.Product;

@WebService
public class Sklep {
    // Tutaj nie ma adnotacji @WebParam ani @WebResult, więc argument w XML nazywa się <arg0>, a wynik <return>
    public String hello(String imie) {
        return "Witaj " + imie;
    }
    
    @WebResult(name="dt")
    public String ktoraGodzina() {
        return LocalDateTime.now().toString();
    }
    
    @WebResult(name="wynik")
    public double oblicz(
            @WebParam(name="liczba1") double liczba1,
            @WebParam(name="liczba2") double liczba2,
            @WebParam(name="dzialanie") String operacja) {
        return switch(operacja) {
            case "+" -> liczba1 + liczba2;
            case "-" -> liczba1 - liczba2;
            case "*" -> liczba1 * liczba2;
            case "/" -> liczba1 / liczba2;
            case "%" -> liczba1 % liczba2;
            case "^" -> Math.pow(liczba1, liczba2);
            default -> throw new IllegalArgumentException("Nieznana operacja " + operacja);
        };
    }
    
    public List<Product> wszystkieProdukty() throws DBException {
        try(DBConnection db = DBConnection.open()) {
            ProductDAO productDAO = db.productDAO();
            return productDAO.readAll();
        }
    }
    
}
