/**
 * 实体接口定义
 * 所有实体都应该实现这些基础接口
 */

import { ContentItem, LensType, TagValueObject } from "./valueObject";

/**
 * 基础实体接口
 */
export interface BaseEntity {
  /** 唯一标识 */
  readonly id: string;
}

/**
 * AI文本实体接口
 */
export interface AITextEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 文本内容 */
  content: string;
}

/**
 * 角色实体接口
 */
export interface RoleEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 角色名称 */
  name: string;
  /** 角色提示词 */
  generateText: string;
  /**角色标签 */
  tags: TagValueObject[];
  /** 角色图片URL */
  imageUrl: string;
  /**来源于草稿箱 */
  fromDraft: boolean;
  /**发生角色形象的生成或者替换 */
  isChangeRole: boolean;
}

/**
 * 剧本中角色实体接口
 */
export interface ScriptRoleEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 角色名称 */
  name: string;
  /** 角色照片 */
  image_url: string;
}

/**
 * 场景实体接口
 */
export interface SceneEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 场景名称 */
  name: string;
  /** 场景图片URL */
  imageUrl: string;
  /** 场景标签 */
  tagIds: TagValueObject[];
  /** 场景提示词 */
  generateText: string;
}

/**
 * 视频片段实体接口
 */
export interface VideoSegmentEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 视频片段名称 */
  name: string;
  /**视频片段草图Url */
  sketchUrl: string;
  /**视频片段视频Url */
  videoUrl: {
    video_url: string;
    video_id: string;
    video_status: number | null;
  }[];
  /**视频片段状态 0:视频加载中 1:任务已完成 2:任务失败 */
  status: number | null;
  /**镜头项 */
  lens: LensType[];
}

/**
 * 图片故事实体接口
 * @description 表示一条图片故事及其相关信息
 */
export interface ImageStoryEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 图片URL */
  imageUrl: string;
  /** 图片故事用户描述 */
  imageStory: string;
  /** 图片故事分析结果 */
  imageAnalysis: string;
  /** 故事分类 */
  storyType: string;
  /**角色头像 */
  roleImage: {
    /** 名称 */
    name: string;
    /** 头像URL（本地create的url） */
    avatar_url: string;
    /** 角色区域 小数比例形式 */
    region: {
      /** x坐标 */
      x: number;
      /** y坐标 */
      y: number;
      /** 宽度 */
      width: number;
      /** 高度 */
      height: number;
    } | null;
  }[];
}
/**
 * 故事模板实体接口
 * @description 表示一个故事模板及其相关信息
 */
export interface StoryTemplateEntity {
  /** 唯一标识 */
  readonly id: string;
  /** 故事模板名称 */
  name: string;
  /** 故事模板图片 */
  image_url: string[];
  /** 故事模板概览*/
  generateText: string;
  /** 故事分类 */
  category: string;
  /** 故事模板ID */
  template_id: string;
  /** 故事角色 */
  storyRole: {
    /** 角色名 */
    role_name: string;
    /** 角色描述，ai分析出来，用于剧本生成 */
    role_description: string;
    /** 用户提示,提示给用户需要输入什么内容 */
    user_tips: string;
    /** 约束,可选,用于传给ai，让ai去拦截用户不符合约束的输入内容 */
    constraints: string;
    /** 照片URL */
    photo_url: string;
    /** 声音URL */
    voice_url: string;
  }[];
  /** 道具 */
  storyItem: {
    /** 道具名 */
    item_name: string;
    /** 道具描述，ai分析出来，用于剧本生成 */
    item_description: string;
    /** 用户提示,提示给用户需要输入什么内容 */
    user_tips: string;
    /** 约束,可选,用于传给ai，让ai去拦截用户不符合约束的输入内容 */
    constraints: string;
    /** 道具照片URL */
    photo_url: string;
  }[];
  /** 自由输入文字 */
  freeInputItem?: {
    /** 用户提示,提示给用户需要输入什么内容 */
    user_tips: string;
    /** 约束,可选,用于传给ai，让ai去拦截用户不符合约束的输入内容 */
    constraints: string;
    /** 自由输入文字 */
    free_input_text: string;
  }
}
