package db

import (
	"context"
	"fmt"
	"github.com/jackc/pgx/v4/pgxpool"
	"os"
)

var pool *pgxpool.Pool

func InitDB(host string, port int, user string, password string, dbname string) {

	psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
		"password=%s dbname=%s sslmode=disable",
		host, port, user, password, dbname)

	fmt.Println(psqlInfo)

	var err error
	pool, err = pgxpool.Connect(context.Background(), psqlInfo)
	if err != nil {
		_, _ = fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
		os.Exit(1)
	}

	var success string
	err = pool.QueryRow(context.Background(), "select 'Successfully connected!'").Scan(&success)
	if err != nil {
		_, _ = fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
		os.Exit(1)
	}
	fmt.Println(success)
}

func CloseDb() {
	pool.Close()
}

func Testf() {
	rows, dbErr := pool.Query(context.Background(), "select game_name from game")
	if dbErr != nil {
		_, _ = fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", dbErr)
		os.Exit(1)
	}
	for rows.Next() {
		var gameName string
		dbErr = rows.Scan(&gameName)
		if dbErr != nil {
			_, _ = fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", dbErr)
		}
		_, _ = fmt.Fprintf(os.Stderr, "%v\n", gameName)
	}
}

func resetGameIdSeq() {
	_, err := pool.Query(context.Background(), "SELECT setval('game_id_seq', (SELECT MAX(id) FROM game)+1);")
	if err != nil {
		_, _ = fmt.Fprintf(os.Stderr, "Exec failed: %v\n", err)
	}
}
