import * as NetService from '@t3tools/shared/Net';
import * as NodeCrypto from '@effect/platform-node/NodeCrypto';
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 NodeServices from '@effect/platform-node/NodeServices';
import * as EnvironmentAuth from './src/auth/EnvironmentAuth.ts';
import * as ServerConfig from './src/config.ts';
import { resolveCliAuthConfig } from './src/cli/config.ts';
import { readLiveServerRuntimeState } from './src/serverRuntimeState.ts';
import { mcpToolSession } from './src/mcp/AcpMcpStdioBridge.ts';
const [baseDir, threadId, ...urls] = process.argv.slice(2);
await Effect.runPromise(Effect.gen(function* () {
 const config = yield* resolveCliAuthConfig({baseDir:Option.some(baseDir)}, Option.none());
 yield* Effect.gen(function* () {
  const runtime = yield* readLiveServerRuntimeState(config.serverRuntimeStatePath);
  if (Option.isNone(runtime)) throw new Error('server is not running');
  const auth = yield* EnvironmentAuth.EnvironmentAuth;
  const issued = yield* Effect.acquireRelease(auth.issueMcpClientSession({label:'synthetic PR sync evidence',access:'full-access',peerLink:false,client:{deviceType:'bot'}}), s=>auth.revokeSession(s.sessionId));
  const session = yield* mcpToolSession({endpoint:new URL('/mcp',runtime.value.origin).href,authorization:`Bearer ${issued.token}`,clientName:'pr-sync-evidence'});
  console.log(JSON.stringify(awaited(yield* session.call('link_pull_requests',{threadId,urls}))));
 }).pipe(Effect.scoped,Effect.provide(EnvironmentAuth.layerRuntime.pipe(Layer.provide(ServerConfig.layer(config)),Layer.provide(Layer.succeed(References.MinimumLogLevel, config.logLevel)))));
}).pipe(Effect.provide(Layer.mergeAll(NodeServices.layer,NodeCrypto.layer,NetService.layer))));
function awaited(result:unknown){ return result; }
