import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  AffectedUsersInput,
  AffectedUsersResponse,
  CleanRequest,
  CleanResponse,
  FeatureFlagListResponse,
  FeatureFlagResponse,
  FeatureFlagUpdateInput,
  FeatureStatsInput,
  FeatureStatsResponse,
  MessageResponse,
  MintRequest,
  MintResponse,
  RemoveOverrideInput,
  UserOverrideInput,
} from "./types"

/**
 * Admin module definition with nested routes
 */
export const adminModule = defineModule({
  name: "admin",
  prefix: "/admin",
  routes: {
    // Feature flags management (nested)
    featureFlags: {
      list: defineRoute<never, FeatureFlagListResponse>(
        "GET",
        "/feature-flags",
      ),

      update: defineRoute<FeatureFlagUpdateInput, FeatureFlagResponse>(
        "PUT",
        "/feature-flags/{name}",
      ),

      override: defineRoute<UserOverrideInput, MessageResponse>(
        "POST",
        "/feature-flags/{name}/overrides",
      ),

      removeOverride: defineRoute<RemoveOverrideInput, MessageResponse>(
        "DELETE",
        "/feature-flags/{name}/overrides/{userId}",
      ),

      stats: defineRoute<FeatureStatsInput, FeatureStatsResponse>(
        "GET",
        "/feature-flags/{name}/stats",
      ),

      affectedUsers: defineRoute<AffectedUsersInput, AffectedUsersResponse>(
        "GET",
        "/feature-flags/{name}/affected-users",
      ),
    },

    // Clean operations (nested)
    clean: {
      execute: defineRoute<CleanRequest, CleanResponse>("POST", "/clean"),
    },

    // Mint operations (nested)
    mint: {
      execute: defineRoute<MintRequest, MintResponse>("POST", "/mintdscsafr"),
    },
  },
})

// Export the API type
export type AdminAPI = typeof adminModule.api

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