import {
  type LoginResult,
  type ImpersonationUserIdentity,
  type ImpersonationResult,
  type CreateUser,
  type User,
  type CreateUserResult,
} from '@accounts/types';
import { type AccountsClient } from './accounts-client';

export interface TransportInterface {
  client: AccountsClient;
  createUser(user: CreateUser): Promise<CreateUserResult>;
  authenticateWithService(
    service: string,
    authenticateParams: {
      [key: string]: string | object;
    }
  ): Promise<boolean>;
  loginWithService(
    service: string,
    authenticateParams: {
      [key: string]: string | object;
    }
  ): Promise<LoginResult>;
  logout(): Promise<void>;
  getUser(): Promise<User>;
  refreshTokens(accessToken: string, refreshToken: string): Promise<LoginResult>;
  verifyEmail(token: string): Promise<void>;
  sendResetPasswordEmail(email: string): Promise<void>;
  sendVerificationEmail(email: string): Promise<void>;
  resetPassword(token: string, newPassword: string): Promise<LoginResult | null>;
  addEmail(newEmail: string): Promise<void>;
  changePassword(oldPassword: string, newPassword: string): Promise<void>;
  impersonate(token: string, impersonated: ImpersonationUserIdentity): Promise<ImpersonationResult>;
  requestMagicLinkEmail(email: string): Promise<void>;
}
