import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  CreateInvitationRequest,
  CreateInvitationResponse,
  GetInvitationLimitationResponse,
  GetInvitationsListResponse,
  UseInvitationRequest,
  UseInvitationResponse,
} from "./types"

/**
 * Invitations module for managing invitation codes
 */
export const invitationsModule = defineModule({
  name: "invitations",
  prefix: "/invitations",
  routes: {
    // Get current invitation limit for user
    getLimitation: defineRoute<never, GetInvitationLimitationResponse>(
      "GET",
      "/limitation",
    ),

    // List all invitations created by user
    list: defineRoute<never, GetInvitationsListResponse>("GET", "/"),

    // Create new invitation code
    create: defineRoute<CreateInvitationRequest, CreateInvitationResponse>(
      "POST",
      "/new",
    ),

    // Use/redeem invitation code
    use: defineRoute<UseInvitationRequest, UseInvitationResponse>(
      "POST",
      "/use",
    ),
  },
})

// Export the API type
export type InvitationsAPI = typeof invitationsModule.api

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