/**
 * 多平台登录服务 - 类型定义
 * @module services/login/types
 */

import type { Browser, BrowserContext, Page } from 'playwright';
import type { PlatformType } from '@media-manager/shared';
import type { AILoginAssistant } from '../AILoginAssistant.js';

// ==================== 配置类型 ====================

/**
 * 平台登录配置
 */
export interface PlatformLoginConfig {
  /** 平台标识 */
  platform: PlatformType;
  /** 平台显示名称 */
  displayName: string;
  /** 登录页面 URL */
  loginUrl: string;
  /** 登录成功的 URL 特征 */
  successIndicators: string[];
  /** Cookie 域名 */
  cookieDomain: string;
  /** 账号ID前缀 */
  accountIdPrefix: string;
  /** 登录超时时间（可选） */
  loginTimeout?: number;
}

// ==================== 会话类型 ====================

/**
 * 登录会话状态
 */
export type LoginSessionStatus = 
  | 'pending'    // 等待扫码
  | 'fetching'   // 正在获取账号信息
  | 'success'    // 登录成功
  | 'failed'     // 登录失败
  | 'timeout'    // 登录超时
  | 'cancelled'; // 已取消

/**
 * 登录会话
 */
export interface LoginSession {
  /** 会话ID */
  id: string;
  /** 用户ID */
  userId?: number;
  /** 平台 */
  platform: PlatformType;
  /** 浏览器实例 */
  browser: Browser;
  /** 浏览器上下文 */
  context: BrowserContext;
  /** 页面 */
  page: Page;
  /** 状态 */
  status: LoginSessionStatus;
  /** 创建时间 */
  createdAt: Date;
  /** Cookie */
  cookies?: string;
  /** 账号信息 */
  accountInfo?: AccountInfo;
  /** 错误信息 */
  error?: string;
  /** API 拦截数据 */
  apiData?: Record<string, any>;
  /** AI 助手 */
  aiAssistant?: AILoginAssistant;
}

// ==================== 账号信息类型 ====================

/**
 * 账号信息
 */
export interface AccountInfo {
  /** 账号ID（带平台前缀：dy_xxx, xhs_xxx, sph_xxx, bjh_xxx） */
  accountId: string;
  /** 账号名称/昵称 */
  accountName: string;
  /** 头像URL */
  avatarUrl?: string;
  /** 粉丝数 */
  fansCount?: number;
  /** 作品数 */
  worksCount?: number;
  /** 关注数 */
  followingCount?: number;
  /** 获赞数 */
  likeCount?: number;
}

// ==================== 事件类型 ====================

/**
 * 登录结果事件
 */
export interface LoginResultEvent {
  /** 会话ID */
  sessionId: string;
  /** 用户ID */
  userId?: number;
  /** 状态 */
  status: LoginSessionStatus | 'fetching';
  /** 加密后的 Cookie */
  cookies?: string;
  /** 账号信息 */
  accountInfo?: AccountInfo;
  /** 原始 Cookie（用于调试） */
  rawCookies?: any[];
  /** 错误信息 */
  error?: string;
  /** 提示消息 */
  message?: string;
}

/**
 * AI 分析事件
 */
export interface AIAnalysisEvent {
  sessionId: string;
  userId?: number;
  status: string;
  analysis: {
    isLoggedIn: boolean;
    hasVerification: boolean;
    verificationType?: string;
    verificationDescription?: string;
    pageDescription: string;
    suggestedAction?: string;
  };
}

/**
 * 验证需求事件
 */
export interface VerificationNeededEvent {
  sessionId: string;
  userId?: number;
  verificationType?: string;
  description?: string;
  suggestedAction?: string;
}

/**
 * 登录服务事件定义
 */
export interface LoginServiceEvents {
  loginResult: LoginResultEvent;
  aiAnalysis: AIAnalysisEvent;
  verificationNeeded: VerificationNeededEvent;
}
