import type { LTApiResult } from '../types/sdk';
import type { LTRoleType } from '../types';
/**
 * List users with optional filters for role, role type, status, and pagination.
 *
 * @param input.role — filter by role name
 * @param input.roleType — filter by role type (superadmin, admin, member)
 * @param input.status — filter by user status
 * @param input.limit — maximum number of users to return
 * @param input.offset — number of users to skip for pagination
 * @returns `{ status: 200, data: User[] }` on success
 */
export declare function listUsers(input: {
    role?: string;
    roleType?: LTRoleType;
    status?: string;
    limit?: number;
    offset?: number;
}): Promise<LTApiResult>;
/**
 * Retrieve a single user by ID.
 *
 * @param input.id — the user's unique identifier
 * @returns `{ status: 200, data: User }` on success, or `{ status: 404 }` if not found
 */
export declare function getUser(input: {
    id: string;
}): Promise<LTApiResult>;
/**
 * Create a new user. Requires admin privileges.
 *
 * Validates that external_id is present and that any provided roles have valid
 * names and types. Returns 409 if a user with the same external_id already exists.
 *
 * @param input.external_id — external system identifier (required)
 * @param input.email — user's email address
 * @param input.display_name — user's display name
 * @param input.roles — initial role assignments, each with a role name and type (superadmin, admin, member)
 * @param input.metadata — arbitrary key-value metadata to attach to the user
 * @returns `{ status: 201, data: User }` on success, or `{ status: 409 }` on duplicate external_id
 */
export declare function createUser(input: {
    external_id?: string;
    email?: string;
    display_name?: string;
    password?: string;
    roles?: {
        role: string;
        type: string;
    }[];
    metadata?: Record<string, any>;
}): Promise<LTApiResult>;
/**
 * Update an existing user's profile fields. Requires admin privileges.
 *
 * Only the provided fields are updated; omitted fields remain unchanged.
 *
 * @param input.id — the user's unique identifier (required)
 * @param input.email — new email address
 * @param input.display_name — new display name
 * @param input.status — new user status
 * @param input.metadata — replacement metadata object
 * @returns `{ status: 200, data: User }` on success, or `{ status: 404 }` if not found
 */
export declare function updateUser(input: {
    id: string;
    email?: string;
    display_name?: string;
    password?: string;
    status?: string;
    metadata?: Record<string, any>;
}): Promise<LTApiResult>;
/**
 * Delete a user by ID. Requires admin privileges.
 *
 * @param input.id — the user's unique identifier
 * @returns `{ status: 200, data: { deleted: true } }` on success, or `{ status: 404 }` if not found
 */
export declare function deleteUser(input: {
    id: string;
}): Promise<LTApiResult>;
/**
 * Retrieve all roles assigned to a user.
 *
 * @param input.id — the user's unique identifier
 * @returns `{ status: 200, data: { roles: Role[] } }` on success
 */
export declare function getUserRoles(input: {
    id: string;
}): Promise<LTApiResult>;
/**
 * Assign a role to a user. Requires admin privileges.
 *
 * Validates that both role and type are provided and that the type is one of
 * superadmin, admin, or member.
 *
 * @param input.id — the user's unique identifier
 * @param input.role — the role name to assign
 * @param input.type — the role type (superadmin, admin, or member)
 * @returns `{ status: 201, data: UserRole }` on success
 */
export declare function addUserRole(input: {
    id: string;
    role: string;
    type: string;
}): Promise<LTApiResult>;
/**
 * Remove a role from a user. Requires admin privileges.
 *
 * @param input.id — the user's unique identifier
 * @param input.role — the role name to remove
 * @returns `{ status: 200, data: { removed: true } }` on success, or `{ status: 404 }` if role not found
 */
export declare function removeUserRole(input: {
    id: string;
    role: string;
}): Promise<LTApiResult>;
