package at.vvo.omds.helpers;

import at.vvo.omds.types.omds3.r2025_05.common.ProduktbausteinType;
import at.vvo.omds.types.omds3.r2025_05.on2antrag.kfz.ObjectFactory;

public class ObjectFactoryFactory {
    public ProduktbausteinType create(String classPath) {
        if (classPath != null) {
            if (classPath.toLowerCase().contains("kfz")){
                ObjectFactory of = new ObjectFactory();
                String typeName = classPath.substring(classPath.lastIndexOf(".") + 1);

                return switch (typeName) {
                    case "VerkaufsproduktKfzType" -> of.createVerkaufsproduktKfzType();
                    case "HaftpflichtKfzType" -> of.createHaftpflichtKfzType();
                    case "VollkaskoKfzType" -> of.createVollkaskoKfzType();
                    case "AssistanceKfzType" -> of.createAssistanceKfzType();
                    case "TeilkaskoKfzType" -> of.createTeilkaskoKfzType();
                    case "InsassenUnfallKfzType" -> of.createInsassenUnfallKfzType();
                    default -> null;
                };
            } else if (classPath.toLowerCase().contains("sachprivat")){
                at.vvo.omds.types.omds3.r2025_05.on2antrag.sachPrivat.ObjectFactory of =
                        new at.vvo.omds.types.omds3.r2025_05.on2antrag.sachPrivat.ObjectFactory();
                String typeName = classPath.substring(classPath.lastIndexOf(".") + 1);

                return switch (typeName) {
                    case "VerkaufsproduktSachPrivatType" -> of.createVerkaufsproduktSachPrivatType();
                    case "ProduktGebaeudeversicherungType" -> of.createProduktGebaeudeversicherungType();
                    case "ProduktSachPrivatType" -> of.createProduktSachPrivatType();

                    default -> null;
                };
            }
        }
        return null;
    }
}
