//go:build !dev

package db

import (
	"context"
	"fmt"
	"os"

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

var Conn *PoolProxy

func Connect() error {
	// Connect to Postgres on local network (127.x.x.x)
	dsn := fmt.Sprintf(
		"postgres://%s:%s@%s:5432/%s?require_auth=scram-sha-256",
		getEnv("POSTGRES_USER"),
		getEnv("POSTGRES_PASSWORD"),
		getEnv("POSTGRES_HOST"),
		getEnv("POSTGRES_DB"),
	)

	poolCfg, err := pgxpool.ParseConfig(dsn)
	if err != nil {
		return err
	}
	poolCfg.ConnConfig.RuntimeParams["timezone"] = "UTC"
	pool, err := pgxpool.NewWithConfig(context.Background(), poolCfg)
	if err != nil {
		return err
	}

	Conn = NewPoolProxy(pool)

	err = testDB()
	if err != nil {
		return err
	}

	return nil
}

func testDB() error {
	ctx := context.Background()
	conn, err := Conn.Acquire(ctx)
	if err != nil {
		return err
	}
	defer conn.Release()

	row := conn.QueryRow(ctx, "SELECT 1")
	var result int
	err = row.Scan(&result)
	if err != nil {
		return err
	}
	return nil
}

func getEnv(key string) string {
	if val := os.Getenv(key); val != "" {
		return val
	}
	// Return empty string instead of fatal error - allows tests to run without prod env vars
	return ""
}
