/**
 * 视频编辑功能相关的TypeScript类型定义
 */

/**
 * 编辑点位置坐标
 */
export interface EditPointPosition {
  /** X坐标（相对于视频容器的百分比，0-100） */
  x: number;
  /** Y坐标（相对于视频容器的百分比，0-100） */
  y: number;
}

/**
 * 编辑点状态枚举
 */
export enum EditPointStatus {
  /** 待编辑 - 刚创建，等待用户输入 */
  PENDING = 'pending',
  /** 已编辑 - 用户已输入描述 */
  EDITED = 'edited',
  /** 处理中 - 正在处理用户的编辑请求 */
  PROCESSING = 'processing',
  /** 已完成 - 编辑请求已处理完成 */
  COMPLETED = 'completed',
  /** 失败 - 编辑请求处理失败 */
  FAILED = 'failed'
}

/**
 * 编辑点数据结构
 */
export interface EditPoint {
  /** 唯一标识符 */
  id: string;
  /** 视频ID */
  videoId: string;
  /** 项目ID */
  projectId: string;
  /** 用户ID */
  userId: number;
  /** 点击位置坐标 */
  position: EditPointPosition;
  /** 视频时间戳（秒） */
  timestamp: number;
  /** 编辑描述文本 */
  description: string;
  /** 编辑点状态 */
  status: EditPointStatus;
  /** 创建时间 */
  createdAt: number;
  /** 更新时间 */
  updatedAt: number;
  /** 是否显示输入框 */
  showInput?: boolean;
  /** 连接线方向偏好 */
  connectionDirection?: 'top' | 'bottom' | 'left' | 'right' | 'auto';
}

/**
 * 编辑点创建请求
 */
export interface CreateEditPointRequest {
  videoId: string;
  projectId: string;
  position: EditPointPosition;
  timestamp: number;
  description?: string;
}

/**
 * 编辑点更新请求
 */
export interface UpdateEditPointRequest {
  id: string;
  description?: string;
  status?: EditPointStatus;
  position?: EditPointPosition;
}

/**
 * 编辑点删除请求
 */
export interface DeleteEditPointRequest {
  id: string;
}

/**
 * 编辑点查询响应
 */
export interface EditPointsResponse {
  editPoints: EditPoint[];
  totalCount: number;
  hasMore: boolean;
}

/**
 * 视频编辑配置
 */
export interface VideoEditConfig {
  /** 是否启用编辑模式 */
  enabled: boolean;
  /** 最大编辑点数量 */
  maxEditPoints: number;
  /** 连接线样式配置 */
  connectionStyle: {
    /** 连接线颜色 */
    color: string;
    /** 连接线宽度 */
    strokeWidth: number;
    /** 虚线样式 */
    dashArray: string;
  };
  /** 编辑点样式配置 */
  pointStyle: {
    /** 编辑点大小 */
    size: number;
    /** 编辑点颜色 */
    color: string;
    /** 脉冲动画颜色 */
    pulseColor: string;
  };
}

/**
 * 视频编辑上下文
 */
export interface VideoEditContext {
  /** 当前视频信息 */
  currentVideo: {
    id: string;
    url: string;
    duration: number;
  } | null;
  /** 编辑点列表 */
  editPoints: EditPoint[];
  /** 编辑配置 */
  config: VideoEditConfig;
  /** 是否处于编辑模式 */
  isEditMode: boolean;
  /** 当前选中的编辑点ID */
  selectedEditPointId: string | null;
}

/**
 * 编辑点操作类型
 */
export type EditPointAction = 
  | { type: 'CREATE_EDIT_POINT'; payload: CreateEditPointRequest }
  | { type: 'UPDATE_EDIT_POINT'; payload: UpdateEditPointRequest }
  | { type: 'DELETE_EDIT_POINT'; payload: DeleteEditPointRequest }
  | { type: 'SELECT_EDIT_POINT'; payload: { id: string | null } }
  | { type: 'TOGGLE_EDIT_MODE'; payload: { enabled: boolean } }
  | { type: 'SET_EDIT_POINTS'; payload: { editPoints: EditPoint[] } }
  | { type: 'SHOW_INPUT'; payload: { id: string; show: boolean } };

/**
 * 连接线路径计算参数
 */
export interface ConnectionPathParams {
  /** 起始点坐标 */
  start: { x: number; y: number };
  /** 结束点坐标 */
  end: { x: number; y: number };
  /** 容器尺寸 */
  containerSize: { width: number; height: number };
  /** 弧线弯曲程度 */
  curvature?: number;
}

/**
 * 输入框位置计算结果
 */
export interface InputBoxPosition {
  /** X坐标 */
  x: number;
  /** Y坐标 */
  y: number;
  /** 连接线终点坐标 */
  connectionEnd: { x: number; y: number };
  /** 输入框方向 */
  direction: 'top' | 'bottom' | 'left' | 'right';
}
