package db

import (
	"context"
	"time"

	"bookra/apps/backend/internal/config"

	"github.com/jackc/pgx/v5/pgxpool"
)

type Pools struct {
	App    *pgxpool.Pool
	Direct *pgxpool.Pool
}

func NewPools(cfg config.Config) (*Pools, error) {
	pools := &Pools{}

	if cfg.DatabaseURL != "" {
		pool, err := connect(cfg.DatabaseURL)
		if err != nil {
			return nil, err
		}
		pools.App = pool
	}

	if cfg.DatabaseDirectURL != "" {
		pool, err := connect(cfg.DatabaseDirectURL)
		if err != nil {
			return nil, err
		}
		pools.Direct = pool
	}

	return pools, nil
}

func (p *Pools) Close() {
	if p.App != nil {
		p.App.Close()
	}
	if p.Direct != nil {
		p.Direct.Close()
	}
}

func (p *Pools) DatabaseConfigured() bool {
	return p.App != nil || p.Direct != nil
}

func connect(databaseURL string) (*pgxpool.Pool, error) {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	return pgxpool.New(ctx, databaseURL)
}
