package usecase

import "context"

// ValidateInviteRequest checks an invite code without consuming it.
type ValidateInviteRequest struct {
	TenantID string
	Code     string
}

// InviteView is a read-only invite snapshot.
type InviteView struct {
	ID            string
	TenantID      string
	NewUsersOnly  bool
	RemainingUses int64
}

// ConsumeInviteRequest consumes one use of an invite code.
type ConsumeInviteRequest struct {
	TenantID string
	Code     string
}

// ConsumedInvite is returned after a successful consume.
type ConsumedInvite struct {
	ID           string
	TenantID     string
	NewUsersOnly bool
	UsedCount    int64
}

// InviteUseCase validates and consumes registration invite codes.
type InviteUseCase interface {
	Validate(ctx context.Context, req *ValidateInviteRequest) (*InviteView, error)
	Consume(ctx context.Context, req *ConsumeInviteRequest) (*ConsumedInvite, error)
}
