// Shared types for z-image.ai MCP server

export const BASE_URL = "https://z-image.ai";

// Size mappings used by text-to-image endpoints
export const SIZE_MAP: Record<string, string> = {
  "1:1": "1024*1024",
  "16:9": "1536*864",
  "3:2": "1536*1024",
  "2:3": "1024*1536",
  "3:4": "1152*1536",
  "4:3": "1536*1152",
  "9:16": "864*1536",
};

export const ASPECT_RATIOS = ["1:1", "16:9", "3:2", "2:3", "3:4", "4:3", "9:16"] as const;
export type AspectRatio = (typeof ASPECT_RATIOS)[number];

export const OUTPUT_FORMATS = ["png", "jpeg", "webp"] as const;
export type OutputFormat = (typeof OUTPUT_FORMATS)[number];

export const RESOLUTIONS = ["480p", "720p", "1080p"] as const;
export type Resolution = (typeof RESOLUTIONS)[number];

export interface TaskResult {
  taskId: string;
  status: string;
  output?: string;
  outputs?: string[];
}

export interface ApiResponse<T = unknown> {
  code: number;
  data?: T;
  message?: string;
}

export interface StatusData {
  status: string;
  output?: string;
  outputs?: string[];
  image_url?: string;
  url?: string;
  output_url?: string;
  image?: string;
}

export interface GenerateResponse {
  code: number;
  data?: {
    taskId: string;
    [key: string]: unknown;
  };
  message?: string;
}

// Extract output URL from various response formats
export function extractOutputUrl(data: StatusData): string | null {
  return data.output || data.outputs?.[0] || data.image_url || data.url || data.output_url || data.image || null;
}

// Tool endpoint definitions - maps tool name to endpoint + scenario
export interface ToolEndpoint {
  endpoint: string;
  scenario: string;
}

export const TOOL_ENDPOINTS: Record<string, ToolEndpoint> = {
  // Text-to-Image
  zimage_generate: { endpoint: "/api/ai/z-image-turbo-text-to-image/generate", scenario: "generate-image" },
  zimage_turbo_t2i: { endpoint: "/api/ai/z-image-turbo-text-to-image/generate", scenario: "generate-image" },
  nano_banana_t2i: { endpoint: "/api/ai/nano-banana-text-to-image/generate", scenario: "nano-banana-text-to-image" },
  nano_banana_pro_t2i: { endpoint: "/api/ai/nano-banana-pro-text-to-image/generate", scenario: "nano-banana-pro-text-to-image" },
  nano_banana_2_t2i: { endpoint: "/api/ai/nano-banana-2-text-to-image/generate", scenario: "nano-banana-2-text-to-image" },
  seedream_v45_t2i: { endpoint: "/api/ai/seedream-v4-5-text-to-image/generate", scenario: "seedream-v4-5-text-to-image" },
  seedream_50_lite_t2i: { endpoint: "/api/ai/seedream-5-0-lite-text-to-image/generate", scenario: "seedream-5-0-lite-text-to-image" },
  flux_2_klein_t2i: { endpoint: "/api/ai/flux-2-klein-text-to-image/generate", scenario: "flux-2-klein-text-to-image" },
  gpt_image_1_t2i: { endpoint: "/api/ai/gpt-image-1-text-to-image/generate", scenario: "gpt-image-1-text-to-image" },
  qwen_t2i: { endpoint: "/api/ai/qwen-202512-text-to-image/generate", scenario: "qwen-202512-text-to-image" },

  // Image-to-Image
  image_to_image: { endpoint: "/api/ai/image-to-image/generate", scenario: "image-to-image" },
  flux_2_klein_i2i: { endpoint: "/api/ai/flux-2-klein-image-to-image/generate", scenario: "flux-2-klein-image-to-image" },
  soul_i2i: { endpoint: "/api/ai/soul-image-to-image/generate", scenario: "soul-image-to-image" },
  zimage_turbo_i2i: { endpoint: "/api/ai/z-image-turbo-image-to-image/generate", scenario: "z-image-turbo-image-to-image" },
  grok_imagine: { endpoint: "/api/ai/grok-imagine-image/generate", scenario: "grok-imagine-image" },
  seedream_50_lite_i2i: { endpoint: "/api/ai/seedream-5-0-lite-image-to-image/generate", scenario: "seedream-5-0-lite-image-to-image" },
  qwen_max_i2i: { endpoint: "/api/ai/qwen-image-max-image-to-image/generate", scenario: "qwen-image-max-image-to-image" },
  nano_banana_i2i: { endpoint: "/api/ai/nano-banana-image-to-image/generate", scenario: "nano-banana-image-to-image" },
  nano_banana_2_i2i: { endpoint: "/api/ai/nano-banana-2-image-to-image/generate", scenario: "nano-banana-2-image-to-image" },
  nano_banana_pro_edit: { endpoint: "/api/ai/nano-banana-pro-edit-ultra/generate", scenario: "nano-banana-pro-edit-ultra" },

  // Image Utilities
  image_eraser: { endpoint: "/api/ai/image-eraser/generate", scenario: "image-eraser" },
  background_remover: { endpoint: "/api/ai/image-background-remover/generate", scenario: "image-background-remover" },
  image_upscaler: { endpoint: "/api/ai/image-upscaler/generate", scenario: "image-upscaler" },
  image_layered: { endpoint: "/api/ai/qwen-image-layered/generate", scenario: "qwen-image-layered" },

  // Text-to-Video
  wan_26_t2v: { endpoint: "/api/ai/text-to-video-wan-2-6/generate", scenario: "text-to-video/wan-2-6" },
  ltx2_fast_t2v: { endpoint: "/api/ai/text-to-video-ltx-2-fast/generate", scenario: "text-to-video-ltx-2-fast" },
  veo_31_t2v: { endpoint: "/api/ai/text-to-video-veo-3-1/generate", scenario: "text-to-video-veo-3-1" },
  seedance_15_pro_t2v: { endpoint: "/api/ai/text-to-video-seedance-1-5-pro/generate", scenario: "text-to-video/seedance-1-5-pro" },
  pixverse_56_t2v: { endpoint: "/api/ai/text-to-video-pixverse-5-6/generate", scenario: "text-to-video/text-to-video-pixverse-5-6" },

  // Image-to-Video
  ltx2_fast_i2v: { endpoint: "/api/ai/image-to-video-ltx-2-fast/generate", scenario: "image-to-video-ltx-2-fast" },
  veo_31_i2v: { endpoint: "/api/ai/image-to-video-veo-3-1/generate", scenario: "image-to-video-veo-3-1" },
  seedance_15_pro_i2v: { endpoint: "/api/ai/image-to-video-seedance-1-5-pro/generate", scenario: "image-to-video-seedance-1-5-pro" },
  pixverse_56_i2v: { endpoint: "/api/ai/image-to-video-pixverse-5-6/generate", scenario: "image-to-video-pixverse-5-6" },
  vidu_q3_i2v: { endpoint: "/api/ai/image-to-video-vidu-q3/generate", scenario: "image-to-video-vidu-q3" },

  // Video Special
  motion_control_kling: { endpoint: "/api/ai/motion-control-kling-2-6/generate", scenario: "motion-control-kling-2-6" },
  video_face_swap: { endpoint: "/api/ai/video-face-swap/generate", scenario: "video-face-swap" },
  longcat_avatar: { endpoint: "/api/ai/longcat-avatar/generate", scenario: "longcat-avatar" },
};
