package repository

import (
	"context"
	"time"

	authdomain "gateway/internal/model/auth/domain"
)

// RegistrationSession holds OAuth pre-registration state in Redis.
type RegistrationSession struct {
	SessionID          string
	TenantID           string
	TenantSlug         string
	InviteCode         string
	InviteNewUsersOnly bool
	AcceptTermsVersion string
	MarketingOptIn     bool
	Language           string
	Provider           string
	RedirectURI        string
	ClientIP           string
	UserAgent          string
}

// RegistrationSessionStore persists short-lived registration sessions.
type RegistrationSessionStore interface {
	Save(ctx context.Context, session *RegistrationSession, ttl time.Duration) error
	Get(ctx context.Context, sessionID string) (*RegistrationSession, error)
	Delete(ctx context.Context, sessionID string) error
}

// RegistrationSessionRedisKey re-exports the Redis key helper for tests.
func RegistrationSessionRedisKey(sessionID string) string {
	return authdomain.RegistrationSessionRedisKey(sessionID)
}
