
export interface Assistant {
  id: string;
  name: string;
  callCount: number;
  opener: string;
  prompt: string;
  knowledgeBaseId: string;
  language: 'zh' | 'en';
  voice: string; // This will now store the ID of the voice from Voice Library
  speed: number;
  hotwords: string[];
  tools?: string[]; // IDs of enabled tools
  interruptionSensitivity?: number; // In ms
  configMode?: 'platform' | 'dify' | 'fastgpt' | 'none';
  apiUrl?: string;
  apiKey?: string;
  llmModelId?: string;
  asrModelId?: string;
  embeddingModelId?: string;
  rerankModelId?: string;
}

export interface Voice {
  id: string;
  name: string;
  vendor: string;
  gender: string;
  language: string;
  description: string;
  model?: string;
  voiceKey?: string;
  apiKey?: string;
  baseUrl?: string;
  speed?: number;
  gain?: number;
  pitch?: number;
  enabled?: boolean;
  isSystem?: boolean;
}

export interface KnowledgeBase {
  id: string;
  name: string;
  creator: string;
  createdAt: string;
  description?: string;
  embeddingModel?: string;
  chunkSize?: number;
  chunkOverlap?: number;
  status?: string;
  documents: KnowledgeDocument[];
}

export interface KnowledgeDocument {
  id: string;
  name: string;
  size: string;
  uploadDate: string;
}

export type InteractionType = 'text' | 'audio' | 'video';

export interface InteractionDetail {
  role: 'user' | 'assistant';
  content: string; // Text content or transcript
  audioUrl?: string; // Placeholder for audio url
  imageUrls?: string[]; // For video frames
  timestamp: string;
}

export interface CallLog {
  id: string;
  source: 'debug' | 'external';
  status: 'connected' | 'missed';
  startTime: string;
  duration: string;
  agentName: string;
  type: InteractionType;
  details?: InteractionDetail[];
}

export interface Workflow {
  id: string;
  name: string;
  nodeCount: number;
  createdAt: string;
  updatedAt: string;
  nodes: WorkflowNode[];
  edges: WorkflowEdge[];
  globalPrompt?: string;
}

export interface WorkflowNode {
  name: string;
  type: 'conversation' | 'tool' | 'human' | 'end';
  isStart?: boolean;
  metadata: {
    position: { x: number; y: number };
  };
  prompt?: string;
  messagePlan?: {
    firstMessage?: string;
  };
  variableExtractionPlan?: {
    output: Array<{
      type: string;
      title: string;
      description: string;
    }>;
  };
  tool?: {
    type: string;
    function: {
      name: string;
      parameters: any;
    };
    destinations?: any[];
    messages?: any[];
  };
  globalNodePlan?: {
    enabled: boolean;
    enterCondition: string;
  };
}

export interface WorkflowEdge {
  from: string;
  to: string;
  label?: string;
}

export enum TabValue {
  GLOBAL = 'global',
  VOICE = 'voice',
  TOOLS = 'tools',
  KNOWLEDGE = 'knowledge',
  LINK = 'link'
}

export enum TestType {
  FIXED = 'fixed',
  INTELLIGENT = 'intelligent'
}

export enum TestMethod {
  TEXT = 'text',
  AUDIO = 'audio'
}

export interface AutoTestAssistant {
  id: string;
  name: string;
  type: TestType;
  method: TestMethod;
  targetAssistantId: string;
  fixedWorkflowSteps: string[];
  intelligentPrompt: string;
  createdAt: string;
}

export interface Tool {
  id: string;
  name: string;
  description: string;
  category: 'system' | 'query';
  icon: string;
  isCustom?: boolean;
  isSystem?: boolean;
  enabled?: boolean;
}

export interface LLMModel {
  id: string;
  name: string;
  vendor: string;
  type: 'text' | 'embedding' | 'rerank';
  baseUrl: string;
  apiKey: string;
  modelName?: string;
  temperature?: number;
  contextLength?: number;
  enabled?: boolean;
}

export interface ASRModel {
  id: string;
  name: string;
  vendor: string;
  language: string;
  baseUrl: string;
  apiKey: string;
  modelName?: string;
  hotwords?: string[];
  enablePunctuation?: boolean;
  enableNormalization?: boolean;
  enabled?: boolean;
}
