"use client"

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

import type { AttendanceDataService } from "./types"

/**
 * 考勤数据服务 Context。
 *
 * 客户端组件通过 `<AttendanceProvider service={...}>` 注入服务实现，
 * 内部用 `useAttendanceService()` 读取，实现"消费方依赖接口而非具体实现"。
 *
 * 注意：Server Component 无法使用 Context，应直接以接口类型消费
 * `createAttendanceDataService()` 返回的实现。
 */
const AttendanceServiceContext = createContext<AttendanceDataService | null>(null)

export function AttendanceProvider({
  service,
  children,
}: {
  service: AttendanceDataService
  children: ReactNode
}) {
  return (
    <AttendanceServiceContext.Provider value={service}>
      {children}
    </AttendanceServiceContext.Provider>
  )
}

/**
 * 读取注入的考勤数据服务。
 * 若未在 `<AttendanceProvider>` 内调用，抛出明确错误以便定位。
 */
export function useAttendanceService(): AttendanceDataService {
  const service = useContext(AttendanceServiceContext)
  if (!service) {
    throw new Error(
      "useAttendanceService 必须在 <AttendanceProvider> 内调用；" +
        "请在页面根节点注入 AttendanceProvider。",
    )
  }
  return service
}
