package mysql

import (
	"context"
	"fmt"

	"github.com/jmoiron/sqlx"
	"github.com/tidbcloud/pov-service/internal/repo"
)

// GetDatabaseVersion returns basic database information
func GetDatabaseVersion(db *sqlx.DB) (string, error) {
	var version string
	err := db.Get(&version, "SELECT VERSION()")
	if err != nil {
		return "", fmt.Errorf("failed to get database version: %w", err)
	}
	return version, nil
}

type TxnProvider struct {
	db *sqlx.DB
}

// BeginTx starts a new database transaction
func (r *TxnProvider) BeginTx(ctx context.Context) (repo.Tx, error) {
	tx, err := r.db.BeginTxx(ctx, nil)
	if err != nil {
		return nil, fmt.Errorf("failed to begin transaction: %w", err)
	}
	return &mysqlTx{tx: tx}, nil
}
