import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  AddFeedsRequest,
  AddFeedsResponse,
  CreateListRequest,
  CreateListResponse,
  DeleteListRequest,
  DeleteListResponse,
  GetListQuery,
  GetListResponse,
  ListsListQuery,
  ListUserListsResponse,
  RemoveFeedRequest,
  RemoveFeedResponse,
  UpdateListRequest,
  UpdateListResponse,
} from "./types"

/**
 * Lists module definition with core routes
 */
export const listsModule = defineModule({
  name: "lists",
  prefix: "/lists",
  routes: {
    // Basic list operations
    get: defineRoute<GetListQuery, GetListResponse>("GET", "/"),
    list: defineRoute<ListsListQuery, ListUserListsResponse>("GET", "/list"),
    create: defineRoute<CreateListRequest, CreateListResponse>("POST", "/"),
    update: defineRoute<UpdateListRequest, UpdateListResponse>("PATCH", "/"),
    delete: defineRoute<DeleteListRequest, DeleteListResponse>("DELETE", "/"),

    // Feed management
    addFeeds: defineRoute<AddFeedsRequest, AddFeedsResponse>("POST", "/feeds"),
    removeFeed: defineRoute<RemoveFeedRequest, RemoveFeedResponse>(
      "DELETE",
      "/feeds",
    ),
  },
})

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

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