import type { User, UserStats, CreateUserPayload, UpdateUserPayload } from "@/domain/entities/user";
import type { GenerateMcpTokenPayload, McpCredential, McpTokenResult } from "@/domain/entities/mcp-token";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";

export interface UserRepository {
  findAll(params: PaginationQueryParams): Promise<BackendPaginatedData<User>>;
  findById(id: number): Promise<User>;
  create(data: CreateUserPayload): Promise<User>;
  update(id: number, data: UpdateUserPayload): Promise<User>;
  delete(id: number): Promise<void>;
  toggleStatus(id: number): Promise<void>;
  verifyEmail(id: number): Promise<void>;
  resetPassword(id: number, password: string): Promise<void>;
  impersonate(id: number): Promise<{ token: string }>;
  generateMcpToken(id: number, payload?: GenerateMcpTokenPayload): Promise<McpTokenResult>;
  listMcpTokens(id: number): Promise<McpCredential[]>;
  revokeMcpToken(id: number, credentialId: number): Promise<void>;
  getStats(): Promise<UserStats>;
}
