import type {
  InternalUser,
  InternalUserStats,
  InviteInternalUserPayload,
  PermissionMatrix,
  UpdateInternalUserPayload,
} from "@/domain/entities/internal-user";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";

export interface InternalUserRepository {
  findAll(params: PaginationQueryParams): Promise<BackendPaginatedData<InternalUser>>;
  getStats(): Promise<InternalUserStats>;
  invite(payload: InviteInternalUserPayload): Promise<InternalUser>;
  update(id: number, payload: UpdateInternalUserPayload): Promise<InternalUser>;
  delete(id: number): Promise<void>;
  suspend(id: number): Promise<void>;
  activate(id: number): Promise<void>;
  resendInvitation(id: number): Promise<void>;
  getPermissions(id: number): Promise<PermissionMatrix>;
  /** Send the full code -> effective map (all 10); backend stores only what differs from the role default. */
  savePermissions(id: number, permissions: Record<string, boolean>): Promise<PermissionMatrix>;
}
