import { defineModule, defineRoute } from "../../shared/define-module"
import type { EmptyResponse } from "../../types"
import type {
  CreateListRequest,
  DiscoverListsResponse,
  DiscoverQuery,
  ExportInput,
  ExportResponse,
  GetAnalyticsInput,
  ImportListRequest,
  ListAnalyticsResponse,
  ListResponse,
  ListsQuery,
  ListsResponse,
  RemoveFeedInput,
  TrendingListsResponse,
  TrendingQuery,
} from "./types"

/**
 * Lists module definition with nested routes
 */
export const listsModule = defineModule({
  name: "lists",
  prefix: "/lists",
  routes: {
    // Basic list operations
    list: defineRoute<ListsQuery, ListsResponse>("GET", "/"),
    create: defineRoute<CreateListRequest, ListResponse>("POST", "/"),

    removeFeed: defineRoute<RemoveFeedInput, EmptyResponse>(
      "DELETE",
      "/{id}/feeds/{feedId}",
    ),

    // List discovery
    discover: defineRoute<DiscoverQuery, DiscoverListsResponse>(
      "GET",
      "/discover",
    ),

    trending: defineRoute<TrendingQuery, TrendingListsResponse>(
      "GET",
      "/trending",
    ),

    // List import/export
    import: defineRoute<ImportListRequest, ListResponse>("POST", "/import"),

    export: defineRoute<ExportInput, ExportResponse>("GET", "/{id}/export"),

    // List analytics
    getAnalytics: defineRoute<GetAnalyticsInput, ListAnalyticsResponse>(
      "GET",
      "/{id}/analytics",
    ),
  },
})

// Export the API type
export type ListsAPI = typeof listsModule.api

// Re-export types for external consumption
export type * from "./types"
