import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  AIMemoryCreateRequest,
  AIMemoryListQuery,
  AIMemoryListResponse,
  AIMemoryRecord,
  AIMemoryUpdateRequest,
  ChatRequest,
  ChatResponse,
  ConfigResponse,
  DailyRequest,
  DailyResponse,
  SummaryRequest,
  SummaryResponse,
  TextToSpeechRequest,
  TextToSpeechResponse,
  TitleRequest,
  TitleResponse,
  TranslationBatchRequest,
  TranslationBatchResponse,
  TranslationRequest,
  TranslationResponse,
} from "./types"

/**
 * AI module definition with nested AI-powered features
 */
export const aiModule = defineModule({
  name: "ai",
  prefix: "/ai",
  routes: {
    // AI chat interface - streaming response
    chat: defineRoute<ChatRequest, ChatResponse>("POST", "/chat"),

    // Content summarization
    summary: defineRoute<SummaryRequest, SummaryResponse>("GET", "/summary"),

    // Content translation
    translation: defineRoute<TranslationRequest, TranslationResponse>(
      "GET",
      "/translation",
    ),
    translationBatch: defineRoute<
      TranslationBatchRequest,
      TranslationBatchResponse
    >("POST", "/translation/batch", {
      asRaw: true,
    }),

    // Text-to-speech streaming audio
    tts: defineRoute<TextToSpeechRequest, TextToSpeechResponse>(
      "POST",
      "/tts",
      {
        asRaw: true,
      },
    ),

    // Title generation for chat/content
    summaryTitle: defineRoute<TitleRequest, TitleResponse>(
      "POST",
      "/summary-title",
    ),

    // Daily summaries
    daily: defineRoute<DailyRequest, DailyResponse>("GET", "/daily"),

    // AI chat configuration
    config: defineRoute<never, ConfigResponse>("GET", "/chat/config"),

    memory: {
      list: defineRoute<AIMemoryListQuery, AIMemoryListResponse>("GET", "/memory"),
      create: defineRoute<AIMemoryCreateRequest, AIMemoryRecord>("POST", "/memory"),
      update: defineRoute<AIMemoryUpdateRequest, AIMemoryRecord>("PATCH", "/memory/{memoryId}"),
      delete: defineRoute<{ memoryId: string }, { success: boolean }>(
        "DELETE",
        "/memory/{memoryId}",
      ),
    },
  },
})

// Export the API type
export type AIAPI = typeof aiModule.api

export type * from "./types"
