import type { ThemeByMomentStrategy } from '@/schema/gradio-proxy/theme-by-moment'; export interface ImageEditOptions { image: Buffer; mask?: Buffer; // Geminiはマスクフリー編集をサポート、OpenAIのみ必要 prompt: string; size?: string; forceFallbackMode?: boolean; // GPT-5文字起こし分析ベースフォールバックを強制するか // エラーログ用のメタ情報 referenceUrl?: string; // 自社WebサイトURL tabName?: string; userEmail?: string; // ユーザーメールアドレス // SWOT分析データを追加(完全なスキーマ対応) swotData?: { 業界?: string; 商材?: string; 内部環境?: string; 外部環境?: string; 業界トレンド?: string[]; ニーズ?: Array<{ 市場ニーズ: string; ユーザのモーメント: string; }>; 王道?: { 焦点: string; 訴求: string; }; 多道?: { 焦点: string; 訴求: string; }; 強み?: { 訴求?: string[]; 一番の強み?: { 訴求: string; 言い換え: string; 強み?: string; 弱み?: string; ユーザ感情: string; 選定理由: string; }; 一番の弱み?: { 訴求: string; 言い換え: string; 強み?: string; 弱み?: string; ユーザ感情: string; 選定理由: string; }; 顧客: string; }; 弱み?: { 訴求?: string[]; 一番の強み?: { 訴求: string; 言い換え: string; 強み?: string; 弱み?: string; ユーザ感情: string; 選定理由: string; }; 一番の弱み?: { 訴求: string; 言い換え: string; 強み?: string; 弱み?: string; ユーザ感情: string; 選定理由: string; }; 顧客: string; }; 共通?: { 訴求: string[]; 顧客: string; }; 機会の生成元?: Array<{ 機会?: string; 脅威?: string; 生成元テーマ: string[]; }>; 機会?: string[]; 脅威の生成元?: Array<{ 機会?: string; 脅威?: string; 生成元テーマ: string[]; }>; 脅威?: string[]; 積極化戦略?: { テーマ: string; 戦略の内容: string; 戦略の根拠?: string; 関連する内部環境?: string; 関連する外部環境?: string; 想定競合URL?: string[]; }; 差別化戦略?: { テーマ: string; 戦略の内容: string; 戦略の根拠?: string; 関連する内部環境?: string; 関連する外部環境?: string; 想定競合URL?: string[]; }; 改善戦略?: { テーマ: string; 戦略の内容: string; 戦略の根拠?: string; 関連する内部環境?: string; 関連する外部環境?: string; 想定競合URL?: string[]; }; 防衛戦略?: { テーマ: string; 戦略の内容: string; 戦略の根拠?: string; 関連する内部環境?: string; 関連する外部環境?: string; 想定競合URL?: string[]; }; 概要?: string; }; // proposalTabDataSchemaのintentとfvDataSchemaを追加 intent?: { FV_intent?: string; CN_intent?: string; FV_suggest?: string; CN_suggest?: string; fv_creation_intent?: string; cn_creation_intent?: Record; prediction?: number; strategyXMoment?: ThemeByMomentStrategy | unknown[]; strategy: string; }; fv?: { strategy: string; need: string; data: { fv: { コピー: { メインコピー: string; サブコピー1: string; サブコピー2: string; サブコピー3: string; 情報源: { 他社: string; 自社: string; }; }; CTA: { ボタンテキスト: string; マイクロコピー: string; 情報源: { 他社: string; 自社: string; }; }; ビジュアル: { 内容: string; 作成指示: string; 情報源: { 他社: string; 自社: string; }; }; 権威付け: { 内容: string; 作成指示: string; 情報源: { 他社: string; 自社: string; }; }; originalCategories: string[]; }; }; fvCreationIntent?: string; }; } export interface ImageEditResult { buffer: Buffer; url?: string; // URL形式での画像パス(オプション) metadata?: { model?: string; processingTime?: number; }; prompt?: string; } export interface IImageGenerator { editImage(options: ImageEditOptions): Promise; getName(): string; }