import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  InboxCreateRequest,
  InboxCreateResponse,
  InboxDeleteRequest,
  InboxDeleteResponse,
  InboxEmailRequest,
  InboxEmailResponse,
  InboxGetQuery,
  InboxGetResponse,
  InboxListResponse,
  InboxUpdateRequest,
  InboxUpdateResponse,
  InboxWebhookRequest,
  InboxWebhookResponse,
} from "./types"

/**
 * Inboxes module definition - Email inboxes management
 */
export const inboxesModule = defineModule({
  name: "inboxes",
  prefix: "/inboxes",
  routes: {
    // Get specific inbox by handle
    get: defineRoute<InboxGetQuery, InboxGetResponse>("GET", "/"),

    // List user's inboxes
    list: defineRoute<never, InboxListResponse>("GET", "/list"),

    // Create new inbox
    post: defineRoute<InboxCreateRequest, InboxCreateResponse>("POST", "/"),

    // Update inbox
    put: defineRoute<InboxUpdateRequest, InboxUpdateResponse>("PUT", "/"),

    // Delete inbox
    delete: defineRoute<InboxDeleteRequest, InboxDeleteResponse>("DELETE", "/"),

    // Email operations
    email: defineRoute<InboxEmailRequest, InboxEmailResponse>("POST", "/email"),

    // Webhook operations
    webhook: defineRoute<InboxWebhookRequest, InboxWebhookResponse>(
      "POST",
      "/webhook",
    ),
  },
})

// Export the API type
export type InboxesAPI = typeof inboxesModule.api

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