/**
 * EN: Authentication-related type definitions
 * VI: Định nghĩa các kiểu dữ liệu liên quan đến xác thực
 */

/**
 * EN: User response interface
 * VI: Interface cho phản hồi người dùng
 */
export interface UserResponse {
  id: string;
  email: string;
  username: string | null;
  emailVerified: boolean;
  isActive: boolean;
  mfaEnabled?: boolean;
  mfaRequired?: boolean;
  updatedAt?: Date;
}

/**
 * EN: Token response interface
 * VI: Interface cho phản hồi token
 */
export interface TokenResponse {
  accessToken: string;
  refreshToken: string;
  idToken?: string;
}

/**
 * EN: Authentication response interface
 * VI: Interface cho phản hồi xác thực
 */
export interface AuthResponse {
  user: UserResponse;
  tokens: TokenResponse;
}

/**
 * EN: Session response interface
 * VI: Interface cho phản hồi phiên
 */
export interface SessionResponse {
  id: string;
  userId: string;
  deviceId: string;
  deviceName?: string;
  ipAddress?: string;
  userAgent?: string;
  expiresAt: Date;
  isActive: boolean;
  lastActivityAt: Date | null;
  createdAt?: Date;
}

/**
 * EN: Social account response interface
 * VI: Interface cho phản hồi tài khoản mạng xã hội
 */
export interface SocialAccountResponse {
  id: string;
  userId: string;
  provider: string;
  providerId: string;
  email: string;
  name: string | null;
  avatar: string | null;
}

/**
 * EN: Social authentication response interface
 * VI: Interface cho phản hồi xác thực mạng xã hội
 */
export interface SocialAuthResponse {
  user: UserResponse;
  socialAccount: SocialAccountResponse;
}

/**
 * EN: Refresh token response interface
 * VI: Interface cho phản hồi refresh token
 */
export interface RefreshTokenResponse {
  accessToken: string;
  refreshToken?: string;
}
