/**
 * 事件相关类型定义
 * @module types/events
 */

// 重新导出枚举
export { EmitEvent } from './enum';

/**
 * 加载进度事件数据
 */
export interface LoadProgressEvent {
  code: 'download' | 'loaded' | 'loading';
  progress: number;
  total: number;
  url?: string;
}

/**
 * 错误事件数据
 */
export interface ErrorEvent {
  code: string | number;
  message: string;
  details?: any;
}

/**
 * 音频播放事件数据
 */
export interface AudioPlayEvent {
  playing: boolean;
  duration?: number;
  currentTime?: number;
}

/**
 * 语音识别事件数据
 */
export interface Voice2TextEvent {
  isFinal: boolean;
  text: string;
  confidence?: number;
  /** 是否是打断触发的识别结果（用户打断 TTS 播放时为 true） */
  isBargeIn?: boolean;
}

/**
 * 人脸识别结果
 */
export interface FaceRecognitionResult {
  count: number;
  faces: Array<{
    confidence: number;
    box: {
      x: number;
      y: number;
      width: number;
      height: number;
    };
    landmarks?: any[];
  }>;
}

/**
 * 人体检测结果
 */
export interface PersonDetectionResult {
  count: number;
  detected: boolean;
}

/**
 * Gateway 消息事件数据
 */
export interface GatewayMessageEvent {
  type: 'chat' | 'tts' | 'asr' | 'error';
  event: string;
  data: any;
  requestId?: string;
}

/**
 * 事件监听器类型
 */
export type EventListener<T = any> = (data: T) => void;

/**
 * 动画播放事件数据
 */
export interface AnimationEvent {
  code: string;
  name?: string;
  duration?: number;
}

/**
 * 模型加载事件数据
 */
export interface ModelLoadEvent {
  code: string;
  name: string;
  type: 'apose' | 'animation' | 'animation_system';
  progress?: number;
}

/**
 * 角色动作事件数据
 * 对应 Gateway CMD: 1020
 */
export interface CharacterActionEvent {
  /** 动作名称列表（兼容旧格式） */
  actions: string[];
  /** 动作名称 */
  name: string;
  /** 动作额外参数 */
  inputs: Record<string, any>;
}

/**
 * 事件映射类型
 */
export interface EventMap {
  [key: string]: any;
}
