package usecase

import (
	"context"
	"time"
)

// CreateRegistrationSessionRequest binds invite + terms before OAuth redirect.
type CreateRegistrationSessionRequest struct {
	TenantID           string
	TenantSlug         string
	InviteCode         string
	InviteNewUsersOnly bool
	AcceptTermsVersion string
	MarketingOptIn     bool
	Language           string
	Provider           string
	RedirectURI        string
	ClientIP           string
	UserAgent          string
	TTL                time.Duration
}

// RegistrationSessionView is returned to clients before OAuth redirect.
type RegistrationSessionView struct {
	SessionID string
	ExpiresIn int
}

// RegistrationSessionUseCase manages social registration sessions.
type RegistrationSessionUseCase interface {
	Create(ctx context.Context, req *CreateRegistrationSessionRequest) (*RegistrationSessionView, error)
	Get(ctx context.Context, sessionID string) (*CreateRegistrationSessionRequest, error)
	Delete(ctx context.Context, sessionID string) error
}
