import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
import * as NodeCrypto from "@effect/platform-node/NodeCrypto";
import * as NodeServices from "@effect/platform-node/NodeServices";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as Option from "effect/Option";
import * as References from "effect/References";
import * as NetService from "@t3tools/shared/Net";
import { pathToFileURL } from "node:url";

const root = process.argv[2]!;
const home = process.argv[3]!;
const auth = await import(pathToFileURL(`${root}/apps/server/src/auth/EnvironmentAuth.ts`).href);
const server = await import(pathToFileURL(`${root}/apps/server/src/config.ts`).href);
const cli = await import(pathToFileURL(`${root}/apps/server/src/cli/config.ts`).href);
const program = Effect.gen(function* () {
  const config = yield* cli.resolveCliAuthConfig({ baseDir: Option.some(home) }, Option.none(), { quietLogs: true });
  return yield* Effect.gen(function* () {
    const service = yield* auth.EnvironmentAuth;
    const session = yield* service.issueMcpClientSession({ label: "33469 synthetic capture", access: "full-access", peerLink: false, client: { deviceType: "bot" } });
    process.stdout.write(session.token);
  }).pipe(Effect.provide(auth.layerRuntime.pipe(Layer.provide(server.layer(config)), Layer.provide(Layer.succeed(References.MinimumLogLevel, config.logLevel)))));
});
NodeRuntime.runMain(program.pipe(Effect.provide(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer, NetService.layer))));
