import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  CreateMessagingTokenRequest,
  CreateMessagingTokenResponse,
  DeleteMessagingTokenRequest,
  DeleteMessagingTokenResponse,
  GetMessagingTokensResponse,
  TestMessagingQuery,
  TestMessagingResponse,
} from "./types"

/**
 * Messaging module for push notification management
 */
export const messagingModule = defineModule({
  name: "messaging",
  prefix: "/messaging",
  routes: {
    // List messaging tokens for user
    getTokens: defineRoute<never, GetMessagingTokensResponse>("GET", "/"),

    // Create or update messaging token
    createToken: defineRoute<
      CreateMessagingTokenRequest,
      CreateMessagingTokenResponse
    >("POST", "/"),

    // Remove messaging token
    deleteToken: defineRoute<
      DeleteMessagingTokenRequest,
      DeleteMessagingTokenResponse
    >("DELETE", "/"),

    // Test messaging notification
    testNotification: defineRoute<TestMessagingQuery, TestMessagingResponse>(
      "GET",
      "/test",
    ),
  },
})

// Export the API type
export type MessagingAPI = typeof messagingModule.api

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