// 本包承载国家、区域和历史用户区域重算的 MySQL 持久化。
package region

import (
	"context"
	"database/sql"
	"fmt"
)

// Repository 是国家/区域数据在 MySQL 上的存储实现。
type Repository struct {
	// db 由父级 MySQL repository 持有，本包只复用连接池。
	db *sql.DB
}

// New 基于共享 MySQL 连接池创建国家/区域存储对象。
func New(db *sql.DB) *Repository {
	return &Repository{db: db}
}

// queryer 抽象普通连接和事务连接，区域 helper 会同时用于读查询和带锁事务。
type queryer interface {
	QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row
	QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error)
}

func queryRows(ctx context.Context, q queryer, query string, args ...any) (*sql.Rows, error) {
	switch typed := q.(type) {
	case *sql.DB:
		return typed.QueryContext(ctx, query, args...)
	case *sql.Tx:
		return typed.QueryContext(ctx, query, args...)
	default:
		return nil, fmt.Errorf("unsupported queryer %T", q)
	}
}
