package example;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.*;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.postgresql.ds.PGSimpleDataSource;
public final class Factories {
    private Factories() {}
    public static PGSimpleDataSource dataSource() {
        var ds = new PGSimpleDataSource();
        ds.setURL(System.getenv("LAB_DB_URL")); ds.setUser("lab_app");
        ds.setPassword(System.getenv("LAB_APP_PASSWORD")); return ds;
    }
    public static SqlSessionFactory create(boolean secondLevel, LocalCacheScope scope,
            PrepareCounter counter, QueryTrace... traces) {
        var c = new Configuration(new Environment("lab", new JdbcTransactionFactory(), dataSource()));
        c.setCacheEnabled(secondLevel); c.setLocalCacheScope(scope);
        c.setDefaultStatementTimeout(5); c.addInterceptor(counter);
        for (QueryTrace trace : traces) c.addInterceptor(trace);
        c.addMapper(ItemMapper.class);
        return new SqlSessionFactoryBuilder().build(c);
    }
}
