import { defineModule, defineRoute } from "../../shared/define-module"
import type {
  MarkAllAsReadRequest,
  MarkAllAsReadResponse,
  MarkAsReadRequest,
  MarkAsUnreadRequest,
  ReadOperationResponse,
  ReadStatusQuery,
  ReadStatusResponse,
  TotalUnreadCountResponse,
} from "./types"

/**
 * Reads module definition with nested routes
 */
export const readsModule = defineModule({
  name: "reads",
  prefix: "/reads",
  routes: {
    // Basic read operations
    get: defineRoute<ReadStatusQuery, ReadStatusResponse>("GET", "/"),

    markAsRead: defineRoute<MarkAsReadRequest, ReadOperationResponse>(
      "POST",
      "/",
    ),

    markAsUnread: defineRoute<MarkAsUnreadRequest, ReadOperationResponse>(
      "DELETE",
      "/",
    ),

    markAllAsRead: defineRoute<MarkAllAsReadRequest, MarkAllAsReadResponse>(
      "POST",
      "/all",
    ),

    getTotalCount: defineRoute<never, TotalUnreadCountResponse>(
      "GET",
      "/total-count",
    ),
  },
})

// Export the API type
export type ReadsAPI = typeof readsModule.api

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