package identity

import (
	"context"
	"fmt"
	"strings"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
)

type UserPingCAPAuthBinding struct {
	UserID       string
	PingCAPSub   string
	AuthProvider string
}

func (store *Store) GetUserPingCAPAuthBinding(ctx context.Context, userID string) (UserPingCAPAuthBinding, error) {
	row := store.db.QueryRow(ctx, `
SELECT id, COALESCE(pingcap_sub, ''), COALESCE(auth_provider, '')
FROM users
WHERE id = $1
`, strings.TrimSpace(userID))

	var binding UserPingCAPAuthBinding
	if err := row.Scan(&binding.UserID, &binding.PingCAPSub, &binding.AuthProvider); err != nil {
		if coredb.IsNotFound(err) {
			return UserPingCAPAuthBinding{}, ErrNotFound
		}
		return UserPingCAPAuthBinding{}, fmt.Errorf("load user PingCAP auth binding: %w", err)
	}

	binding.UserID = strings.TrimSpace(binding.UserID)
	binding.PingCAPSub = strings.TrimSpace(binding.PingCAPSub)
	binding.AuthProvider = strings.TrimSpace(binding.AuthProvider)
	if binding.PingCAPSub == "" {
		return UserPingCAPAuthBinding{}, ErrNotFound
	}
	return binding, nil
}
