/**
 * SSE event types matching Go realtime constants.
 */
export type EventType =
  | 'chat'
  | 'ai_chat'
  | 'ai_chat_chunk'
  | 'presence'
  | 'notification'
  | 'system'
  | 'error'
  | 'generation_started'
  | 'generation_progress'
  | 'generation_complete'
  | 'generation_failed'
  | 'upload_started'
  | 'upload_progress'
  | 'upload_complete'
  | 'upload_failed'
  // Album generation events (pkg/album)
  | 'album_anchor_complete'
  | 'album_anchor_failed'
  | 'album_shot_generating'
  | 'album_shot_complete'
  | 'album_shot_failed'
  // Persona generation events (pkg/personagen)
  | 'persona_spec_started'
  | 'persona_spec_complete'
  | 'persona_image_started'
  | 'persona_image_progress'
  | 'persona_image_complete'
  | 'persona_video_started'
  | 'persona_video_complete'
  | 'persona_video_failed'
  | 'persona_failed';

/**
 * Chat message data payload.
 */
export interface ChatData {
  content: string;
  userId: string;
  userName?: string;
}

/**
 * AI response data payload.
 */
export interface AIResponseData {
  content: string;
  provider: string;
}

/**
 * AI chunk data payload (for streaming).
 */
export interface AIChunkData {
  streamId: string;
  text: string;
  done: boolean;
  provider?: string;
}

/**
 * Presence message data payload.
 */
export interface PresenceData {
  userId: string;
  userName?: string;
  status: PresenceStatus;
}

/**
 * Presence status values.
 */
export type PresenceStatus = 'online' | 'offline' | 'away';

/**
 * Generation result payload.
 */
export interface GenerationResult {
  url: string;
  provider: string;
  latencyMs: number;
}

/**
 * Upload result payload.
 */
export interface UploadResult {
  id: string;
  original: string;
  optimized: string;
  thumbnail: string;
}
