import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  RSSHubCreateRequest,
  RSSHubCreateResponse,
  RSSHubDeleteRequest,
  RSSHubDeleteResponse,
  RSSHubGetQuery,
  RSSHubGetResponse,
  RSSHubListResponse,
  RSSHubStatusResponse,
  RSSHubUseRequest,
  RSSHubUseResponse,
} from "./types"

/**
 * RSSHub module definition for RSSHub instance management
 */
export const rsshubModule = defineModule({
  name: "rsshub",
  prefix: "/rsshub",
  routes: {
    // Create or update RSSHub instance
    create: defineRoute<RSSHubCreateRequest, RSSHubCreateResponse>(
      "POST",
      "/",
    ),

    // List available RSSHub instances
    // eslint-disable-next-line @typescript-eslint/no-empty-object-type
    list: defineRoute<{}, RSSHubListResponse>(
      "GET",
      "/list",
    ),

    // Delete RSSHub instance
    delete: defineRoute<RSSHubDeleteRequest, RSSHubDeleteResponse>(
      "DELETE",
      "/",
    ),

    // Purchase/use RSSHub instance
    use: defineRoute<RSSHubUseRequest, RSSHubUseResponse>("POST", "/use"),

    // Get specific RSSHub instance
    get: defineRoute<RSSHubGetQuery, RSSHubGetResponse>("GET", "/"),

    // Get user's RSSHub usage status
    // eslint-disable-next-line @typescript-eslint/no-empty-object-type
    status: defineRoute<{}, RSSHubStatusResponse>("GET", "/status"),
  },
})

// Export the API type
export type RSSHubAPI = typeof rsshubModule.api

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