"use client"

import { createContext, useContext, type ReactNode } from "react"

import { defaultMessageListService } from "./default-message-list-service"
import type { MessageListService } from "./message-list-service"

/**
 * P1-8: 消息列表服务 Context。
 *
 * 组件通过 useMessageListService() 获取服务实现，
 * 而非直接 import actions，实现依赖反转。
 *
 * 默认注入真实实现（调用 Server Actions）；
 * 测试时可注入 mock 实现以隔离组件测试。
 */
const MessageListServiceContext = createContext<MessageListService | null>(null)

interface MessageListServiceProviderProps {
  /** 自定义服务实现；不传则使用默认实现（调用真实 Server Actions） */
  service?: MessageListService
  children: ReactNode
}

export function MessageListServiceProvider({
  service = defaultMessageListService,
  children,
}: MessageListServiceProviderProps): ReactNode {
  return (
    <MessageListServiceContext.Provider value={service}>
      {children}
    </MessageListServiceContext.Provider>
  )
}

/**
 * 获取消息列表服务。
 * 必须在 MessageListServiceProvider 内部使用；
 * 未包裹时回退到默认实现（便于渐进迁移）。
 */
export function useMessageListService(): MessageListService {
  const service = useContext(MessageListServiceContext)
  return service ?? defaultMessageListService
}
