import { Effect } from "effect"
import { AuthV2 } from "../auth"
import { PluginV2 } from "../plugin"

export const AuthPlugin = PluginV2.define({
  id: PluginV2.ID.make("auth"),
  effect: Effect.gen(function* () {
    const auth = yield* AuthV2.Service
    return {
      "provider.update": Effect.fn(function* (evt) {
        const account = yield* auth.active(AuthV2.ServiceID.make(evt.provider.id)).pipe(Effect.orDie)
        if (!account) return
        evt.provider.enabled = {
          via: "auth",
          service: account.serviceID,
        }
        if (account.credential.type === "api") {
          evt.provider.options.aisdk.provider.apiKey = account.credential.key
          Object.assign(evt.provider.options.aisdk.provider, account.credential.metadata ?? {})
        }
        if (account.credential.type === "oauth") {
          evt.provider.options.aisdk.provider.apiKey = account.credential.access
        }
      }),
    }
  }),
})