import { Observable } from 'rxjs';
import { AdminInvitation, AdminUserRoleRecord, AdminSession, AdminUser, AdminUserAuditEntry, AdminUserScope, AdminUserStatus } from '../models/admin-user.model';

export interface AdminUsersGateway {
  loadUsers(): Observable<AdminUser[]>;
  loadRoles(): Observable<AdminUserRoleRecord[]>;
  loadInvitations(): Observable<AdminInvitation[]>;
  loadSessions(userId: string): Observable<AdminSession[]>;
  loadAudit(userId: string): Observable<AdminUserAuditEntry[]>;
  setUserRole(userId: string, roleId: string): Observable<AdminUser | null>;
  setUserStatus(userId: string, status: AdminUserStatus): Observable<AdminUser | null>;
  inviteUser(email: string, roleId: string, scope: AdminUserScope): Observable<AdminInvitation>;
  revokeInvitation(id: string): Observable<void>;
  revokeSession(sessionId: string): Observable<void>;
}
