/**
 * EN: Data transfer object for user login
 * VI: Đối tượng truyền dữ liệu cho đăng nhập người dùng
 */
export interface LoginDto {
  /** EN: User email address / VI: Địa chỉ email người dùng */
  email: string;
  /** EN: User password / VI: Mật khẩu người dùng */
  password: string;
}

/**
 * EN: Data transfer object for user registration
 * VI: Đối tượng truyền dữ liệu cho đăng ký người dùng
 */
export interface RegisterDto {
  /** EN: User email address / VI: Địa chỉ email người dùng */
  email: string;
  /** EN: User password / VI: Mật khẩu người dùng */
  password: string;
  /** EN: Password confirmation / VI: Xác nhận mật khẩu */
  confirmPassword: string;
}

import { UserResponse } from './user.types';

/**
 * EN: Response object for authentication operations
 * VI: Đối tượng phản hồi cho các thao tác xác thực
 */
export interface AuthResponse {
  /** EN: JWT access token for API authentication / VI: JWT access token để xác thực API */
  accessToken: string;
  /** EN: JWT refresh token for obtaining new access tokens / VI: JWT refresh token để lấy access token mới */
  refreshToken: string;
  /** EN: Authenticated user information / VI: Thông tin người dùng đã xác thực */
  user: UserResponse;
}

/**
 * EN: Data transfer object for token refresh
 * VI: Đối tượng truyền dữ liệu để làm mới token
 */
export interface RefreshTokenDto {
  /** EN: Valid refresh token / VI: Refresh token hợp lệ */
  refreshToken: string;
}

/**
 * EN: JWT token payload structure
 * VI: Cấu trúc payload JWT token
 */
export interface TokenPayload {
  /** EN: Unique user identifier / VI: Mã định danh duy nhất người dùng */
  userId: string;
  /** EN: User email address / VI: Địa chỉ email người dùng */
  email: string;
  /** EN: User role for authorization / VI: Vai trò người dùng để phân quyền */
  role: string;
  /** EN: Token issued at timestamp / VI: Timestamp token được phát hành */
  iat?: number;
  /** EN: Token expiration timestamp / VI: Timestamp token hết hạn */
  exp?: number;
}

/**
 * EN: Data transfer object for password change
 * VI: Đối tượng truyền dữ liệu để đổi mật khẩu
 */
export interface ChangePasswordDto {
  /** EN: Current password for verification / VI: Mật khẩu hiện tại để xác minh */
  currentPassword: string;
  /** EN: New password / VI: Mật khẩu mới */
  newPassword: string;
}

/**
 * EN: Data transfer object for forgot password
 * VI: Đối tượng truyền dữ liệu cho quên mật khẩu
 */
export interface ForgotPasswordDto {
  /** EN: User email for password reset / VI: Email người dùng để reset mật khẩu */
  email: string;
}

/**
 * EN: Data transfer object for password reset
 * VI: Đối tượng truyền dữ liệu để reset mật khẩu
 */
export interface ResetPasswordDto {
  /** EN: Password reset token / VI: Token reset mật khẩu */
  token: string;
  /** EN: New password / VI: Mật khẩu mới */
  newPassword: string;
}
