export interface UserInvite { id: string; email: string; status: 'pending' | 'accepted' | 'expired' | 'cancelled'; // Permissions to be applied assignments: { immediate?: { role?: string; department?: string; permissions?: string[]; }; conditional?: { ifEmailDomain?: string; thenAssign?: { role?: string; permissions?: string[]; }; }; deferred?: { role?: string; permissions?: string[]; requiresApproval?: boolean; approvedBy?: string; approvedAt?: Date; }; }; // Metadata invitedBy: string; invitedAt: Date; expiresAt: Date; acceptedAt?: Date; // Custom data metadata?: Record; } export interface InviteUserOptions { email: string; role?: string; department?: string; permissions?: string[]; sendEmail?: boolean; expiresIn?: string; immediate?: InviteAssignment; conditional?: ConditionalAssignment; deferred?: DeferredAssignment; metadata?: Record; } export interface InviteAssignment { role?: string; department?: string; permissions?: string[]; } export interface ConditionalAssignment { ifEmailDomain?: string; thenAssign?: InviteAssignment; } export interface DeferredAssignment extends InviteAssignment { requiresApproval?: boolean; } export interface InviteTemplate { id: string; name: string; description?: string; assignments: InviteUserOptions; createdBy: string; createdAt: Date; } export interface BulkInviteResult { successful: string[]; failed: Array<{ email: string; error: string; }>; } export interface InvitePreview { fromRole: string[]; fromDepartment: string[]; explicit: string[]; total: string[]; }