export interface RegisterCommand {
  email?: string;
  phone?: string;
  password?: string;
  displayName: string;
  username?: string;
}

export interface LoginCommand {
  login: string;
  password: string;
  deviceName?: string;
  deviceType?: string;
  fingerprint: string;
  ipAddress?: string;
  userAgent?: string;
}

export interface AuthTokens {
  accessToken: string;
  refreshToken: string;
  expiresAt: string;
  pinVerified: boolean;
  sessionId: string;
  user: PublicUser;
  requiresTotp?: boolean;
  totpChallengeToken?: string;
}

export interface PublicUser {
  id: string;
  email?: string | null;
  phone?: string | null;
  backupEmail?: string | null;
  backupPhone?: string | null;
  displayName: string;
  username?: string | null;
  avatarUrl?: string | null;
  hasAvatar?: boolean;
  isSuperAdmin: boolean;
  status: string;
  roles?: string[];
  permissions?: string[];
  canAccessAdmin?: boolean;
  canManageRoles?: boolean;
  canViewOAuth?: boolean;
  canManageOAuth?: boolean;
  canManageAllOAuth?: boolean;
  canManageUsers?: boolean;
  canManageAllUsers?: boolean;
  canManageSettings?: boolean;
  canViewUsers?: boolean;
  canViewUserDocuments?: boolean;
  hasPassword?: boolean;
  isVerified?: boolean;
  verificationIcon?: string;
  canVerifyUsers?: boolean;
  canManageBots?: boolean;
}

export interface VerifyPinCommand {
  sessionId: string;
  pin: string;
}

export interface UpsertSettingCommand {
  key: string;
  value: string;
  description?: string;
  isSecret?: boolean;
}
