import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  SubscriptionBatchRequest,
  SubscriptionBatchResponse,
  SubscriptionCreateRequest,
  SubscriptionCreateResponse,
  SubscriptionDeleteRequest,
  SubscriptionDeleteResponse,
  SubscriptionExportQuery,
  SubscriptionExportResponse,
  SubscriptionGetQuery,
  SubscriptionGetResponse,
  SubscriptionImportResponse,
  SubscriptionParseOpmlResponse,
  SubscriptionUpdateRequest,
  SubscriptionUpdateResponse,
} from "./types"

/**
 * Subscriptions module definition with nested routes
 */
export const subscriptionsModule = defineModule({
  name: "subscriptions",
  prefix: "/subscriptions",
  routes: {
    // Basic subscription operations
    get: defineRoute<SubscriptionGetQuery, SubscriptionGetResponse>("GET", "/"),

    create: defineRoute<SubscriptionCreateRequest, SubscriptionCreateResponse>(
      "POST",
      "/",
    ),

    update: defineRoute<SubscriptionUpdateRequest, SubscriptionUpdateResponse>(
      "PATCH",
      "/",
    ),

    delete: defineRoute<SubscriptionDeleteRequest, SubscriptionDeleteResponse>(
      "DELETE",
      "/",
    ),

    // Batch patch operations
    batchUpdate: defineRoute<SubscriptionBatchRequest, SubscriptionBatchResponse>(
      "PATCH",
      "/batch",
    ),

    // OPML operations
    import: defineRoute<FormData, SubscriptionImportResponse>(
      "POST",
      "/import",
    ),

    export: defineRoute<SubscriptionExportQuery, SubscriptionExportResponse>(
      "GET",
      "/export",
    ),

    parseOpml: defineRoute<ArrayBuffer, SubscriptionParseOpmlResponse>(
      "POST",
      "/parse-opml",
    ),
  },
})

// Export the API type
export type SubscriptionsAPI = typeof subscriptionsModule.api

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