import * as NodeCrypto from '@effect/platform-node/NodeCrypto';
import * as NetService from '@t3tools/shared/Net';
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 EnvironmentAuth from './src/auth/EnvironmentAuth.ts';
import * as ServerConfig from './src/config.ts';
import {resolveCliAuthConfig} from './src/cli/config.ts';
import {mcpToolSession} from './src/mcp/AcpMcpStdioBridge.ts';
import {readPersistedServerRuntimeState} from './src/serverRuntimeState.ts';
const input=JSON.parse(process.argv[2]!);
await Effect.runPromise(Effect.gen(function*(){
 const config=yield* resolveCliAuthConfig({baseDir:Option.some(process.cwd()+'/.t3')},Option.none());
 return yield* Effect.gen(function*(){
  const runtime=yield* readPersistedServerRuntimeState(config.serverRuntimeStatePath);
  const auth=yield* EnvironmentAuth.EnvironmentAuth;
  const issued=yield* Effect.acquireRelease(auth.issueMcpClientSession({label:'Synthetic evidence driver',access:'full-access',peerLink:false,client:{deviceType:'bot'}}),s=>auth.revokeSession(s.sessionId));
  const session=yield* mcpToolSession({endpoint:new URL('/mcp',Option.getOrThrow(runtime).origin).href,authorization:`Bearer ${issued.token}`,clientName:'evidence-driver'});
  return yield* session.call(input.tool,input.args);
 }).pipe(Effect.scoped,Effect.provide(EnvironmentAuth.layerRuntime.pipe(Layer.provide(ServerConfig.layer(config)))));
}).pipe(Effect.provide(Layer.mergeAll(NodeServices.layer,NodeCrypto.layer,NetService.layer)))).then(x=>console.log(JSON.stringify(x)));
