package example;
import java.util.Map;
import com.zaxxer.hikari.*;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public final class Routing extends AbstractRoutingDataSource implements AutoCloseable {
    private final HikariDataSource a;
    private final HikariDataSource b;
    public Routing(){
        a=pool("route-a",Database.a());
        try{b=pool("route-b",Database.b());}
        catch(RuntimeException failure){a.close();throw failure;}
        try{setTargetDataSources(Map.of("A",a,"B",b));setLenientFallback(false);afterPropertiesSet();}
        catch(RuntimeException failure){b.close();a.close();throw failure;}
    }
    private static HikariDataSource pool(String name,String url){
        var c=new HikariConfig();c.setPoolName(name);c.setJdbcUrl(url);c.setUsername("lab_app");
        c.setPassword(System.getenv("LAB_APP_PASSWORD"));c.setMaximumPoolSize(2);c.setMinimumIdle(0);
        c.setConnectionTimeout(2000);c.setValidationTimeout(1000);return new HikariDataSource(c);
    }
    @Override protected Object determineCurrentLookupKey(){return RouteScope.required();}
    @Override public void close(){try{b.close();}finally{a.close();}}
}
